Thread Perl Bug bei int? (44 answers)
Opened by Rolf_PlusW at 2013-03-01 11:29

Raubtier
 2013-03-05 15:45
#166228 #166228
User since
2012-05-04
1054 Artikel
BenutzerIn

user image
Sorry, was meinst du mit das mit "das gibt nur mit sprintf korrekt 1"?

Code: (dl )
1
2
3
4
$ perl -E'say sprintf("%.13f",((1 - 0.9999) * 10000))'
0.9999999999999
$ perl -E'say sprintf("%.12f",((1 - 0.9999) * 10000))'
1.000000000000

Du hast hier also immer noch 12 Dezimalstellen Genauigkeit, nicht 4.

Mein Standpunkt ist einfach:
* Bei doubles nie direkt mit == vergleichen, sondern immer differenz < epsilon abfragen
* Wenn man was genaueres will, dann muss man eben eine Bibliothek nehmen, die exakt rechnet.

Außerdem wichtig zu wissen: es gibt auch Komma-Zahlen, die exakt dargestellt werden können. Zum Beispiel:
Code: (dl )
1
2
3
4
$ perl -E'say sprintf("%.18f",0.125)'
0.125000000000000000
$ perl -E'say sprintf("%.18f",0.25)'
0.250000000000000000

Andere dagegen nicht:
Code: (dl )
1
2
$ perl -E'say sprintf("%.18f",0.3)' 
0.299999999999999989

View full thread Perl Bug bei int?