Seite 1 von 1
Bug mit Floats, Beispiel 1.1e+27
Verfasst: 22.12.2007 19:51
von AND51
Hallo!
1.1 mal 10 hoch 27 müsste doch 1.100.000.000.000.000.000.000.000.000 (26 Nullen) sein, oder?
Ist es laut PB aber nicht:
Code: Alles auswählen
Debug 1.1e+27 ; Neue Schreibweise, eingeführt in PB 4.00
Debug 1.1*Pow(10, 27)
Debug 1.1*(10000000000*10000000000*10000000)
Debug 1.1*10000000000*10000000000*10000000
Interessant finde ich dabei, dass die letzten beiden Ergebnisse sich unterscheiden. Ist sicher wegen etwas PB internem...
Was sagt ihr dazu?
Re: Bug mit Floats, Beispiel 1.1e+27
Verfasst: 22.12.2007 19:55
von DarkDragon
AND51 hat geschrieben:Hallo!
1.1 mal 10 hoch 27 müsste doch 1.100.000.000.000.000.000.000.000.000 (26 Nullen) sein, oder?
Ist es laut PB aber nicht:
Code: Alles auswählen
Debug 1.1e+27 ; Neue Schreibweise, eingeführt in PB 4.00
Debug 1.1*Pow(10, 27)
Debug 1.1*(10000000000*10000000000*10000000)
Debug 1.1*10000000000*10000000000*10000000
Interessant finde ich dabei, dass die letzten beiden Ergebnisse sich unterscheiden. Ist sicher wegen etwas PB internem...
Was sagt ihr dazu?
Das ist die Ungenauigkeit von Fließkommazahlen nach dem IEEE 754 Standard.
Verfasst: 22.12.2007 20:05
von AND51
Aha. mein Beispiel geht nur bis 1e
+27, aber macht es da überhaupt Sinn, in PureBasic den Breich 1e
+308 anzubieten?? Wenn schon in diesem kleinen Bereich Ungenauigkeiten auftreten...
Variablen, Typen und Operatioren (ganz unten) hat geschrieben:Der genaue Wertebereich, in dessen Rahmen beim Rechnen mit Floats und Doubles korrekte Ergebnisse erzielt werden, sieht wie folgt aus:
Float: +- 1.175494e-38 bis +- 3.402823e+38
Double: +- 2.2250738585072013e-308 bis +- 1.7976931348623157e+308
Ich habe nämlich mal getestet:
gibt 0.0 (null) aus...
Oder habe ich etwas Grundlegendes nicht verstanden??
Verfasst: 22.12.2007 20:07
von DarkDragon
AND51 hat geschrieben:Aha. mein Beispiel geht nur bis 1e
+27, aber macht es da überhaupt Sinn, in PureBasic den Breich 1e
+308 anzubieten??
Variablen, Typen und Operatioren (ganz unten) hat geschrieben:Der genaue Wertebereich, in dessen Rahmen beim Rechnen mit Floats und Doubles korrekte Ergebnisse erzielt werden, sieht wie folgt aus:
Float: +- 1.175494e-38 bis +- 3.402823e+38
Double: +- 2.2250738585072013e-308 bis +- 1.7976931348623157e+308
Ja, denn man kann ja auch mit ungenauen Zahlen weiterrechnen. Einen festen Bereich, wie er in der Hilfe steht gibt es nicht, da es auch auf den Inhalt der Zahl ankommt.
PureBasic kann darin kaum etwas falsch machen. Wahrscheinlicher ist es, dass dein Prozessor etwas falsch macht, denn der rechnet damit, nicht PureBasic.
Verfasst: 22.12.2007 20:12
von AND51
Aha Ja Ok Also...
Klingt einleuchtend!
Verfasst: 22.12.2007 21:46
von Helle
Der in der Hilfe angegebene Wertebereich ist korrekt. PB (besser: die FPU) rechnet innerhalb dieses Wertebereiches mit den jeweiligen Genauigkeiten (Float=7 signifikante Stellen, Double =15) richtig. Der Anwender muss allerdings selber für die Anzeige sorgen:
Siehe auch:
Rechen-Beispiel:
Gruß
Helle
Verfasst: 22.12.2007 21:57
von AND51
Cool, danke für die Info!