Article View: pl.comp.programming
Article #215644Re: Porównywanie liczb, double float
From: DMR
Date: Fri, 12 Jul 2019 05:27
Date: Fri, 12 Jul 2019 05:27
37 lines
2624 bytes
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-mailReferences:
<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