🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.programming
Article #215644

Re: Porównywanie liczb, double float

#215644
From: DMR
Date: Fri, 12 Jul 2019 05:27
37 lines
2624 bytes
> Zamieszcze tu po raz 473 w ciagu 20 lat podstawową formułkę
> (Ba! KANON!)


To ja poprosiłbym o jakiś patent na odporne na zaokrąglenia rozdzielenie części całkowitej i ułamkowej w zmiennej typu double.



> ponaglenia o pilną zapłatę 0.00PLN


No właśnie.
Przykładowo, muszę zrobić: 12345.6789 zł -> 12345 zł 68 gr

Wiadomo:

double suma, f;
int zlote, grosze;

   ...

   suma += 0.005;

   zlote = (int)suma;
   f = suma - zlote;
   grosze = (int)(f * 100.0);

Problemy mogą pojawić w przypadku wartości praktycznie równych wartościom całkowitym.
Gdyby na skutek jakichś zaokrągleń wartość f okazała się ujemna, to nie ma problemu - (int) i tak "dociągnie" ją do zera.

Gorzej, gdyby np. suma = 1234.9999999999999997, za to teoretycznie f = 0.9999999999999997 za sprawą zabłąkanego bitu na końcu przeskoczyła na f = 1.0000000000000001.
Wtedy wyjdzie 1234 zł 100 gr...

Chyba, że nie potrzebnie się martwię.
Testowałem to wielokrotnie dla miliardów złośliwie wygenerowanych danych "z pogranicza" - ani razu się nie wywaliła.

No, ale... :-)
Technical Details
Message-ID: <5b09d1e0-1ed9-4a3c-851e-29cbf826cb3a@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!b26no1118578qtq.0!news-out.google.com!g23ni54qtq.1!nntp.google.com!b26no1118567qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <qdqqh6$n2f$1@dont-email.me> <5d00f035$0$15194$426a74cc@news.free.fr> <5d011217$0$17348$65785112@news.neostrada.pl> <qe65vo$18po$1@gioia.aioe.org>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:a2d1:: with SMTP id l200mr4913391qke.330.1562909275808;        Thu, 11 Jul 2019 22:27:55 -0700 (PDT)
X-Received: by 2002:aed:3363:: with SMTP id u90mr4888531qtd.7.1562909275672; Thu, 11 Jul 2019 22:27:55 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!4.us.feeder.erje.net!feeder.erje.net!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!b26no1118578qtq.0!news-out.google.com!g23ni54qtq.1!nntp.google.com!b26no1118567qtq.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Thu, 11 Jul 2019 22:27:55 -0700 (PDT)
In-Reply-To: <qe65vo$18po$1@gioia.aioe.org>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=93.174.24.8; posting-account=FE4hoAoAAADKg8EtnA4bEyQiJf7iqAgV
NNTP-Posting-Host: 93.174.24.8
References: <qdqqh6$n2f$1@dont-email.me> <5d00f035$0$15194$426a74cc@news.free.fr> <5d011217$0$17348$65785112@news.neostrada.pl> <qe65vo$18po$1@gioia.aioe.org>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <5b09d1e0-1ed9-4a3c-851e-29cbf826cb3a@googlegroups.com>
Subject: Re: Porównywanie liczb, double float
From: DMR <mezzogm@gmail.com>
Injection-Date: Fri, 12 Jul 2019 05:27:55 +0000
Lines: 46
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit