Mailinglisten-Archive |
Hi Pascal, das ist kein Fehler, denn KEIN Compiler kann eine Flieskommazahl exakt darstellen. So wird zum Beispiel 1.5 intern als 1.499999999999... dargestellt und 2.5 als 2.5000000001. Daher stimmen auch die Rundungsergebnisse nicht. 1.5 wird dann abgerundet und 2.5 aufgerundet. Als Abhilfe kann man einen sehr kleinen Betrag dazu addieren. Oder mit der entsprechenden Zehnerpotenz hochrechnen und mit ganzen Zahlen weiterrechnen. -Egon Besuchen Sie Six auf der CeBIT (24.2.-1.3.) in Halle 10, Stand 425, und auf der Hannover-Messe (20.-25.3.) in Halle 14, Stand J50! On Sun, 20 Feb 2000, Pascal Schult wrote: > Hi Liste... > > Ich habe es mal bis 3000 per schleife hochrechnen lassen. das hier sind > die werte, bei denen sich etwas am ergebnis ändert. > > 1.34-1.33 = 0.01 > 2.34-2.33 = 0.0099999999999998 > 16.34 - 16.33 = 0.010000000000002 > 32.34 - 32.33 = 0.010000000000005 > 128.34 - 128.33 = 0.010000000000019 > 256.34 - 256.33 = 0.010000000000048 > 512.34 - 512.33 = 0.010000000000105 > 1024.34 - 1024.33 = 0.010000000000218 > > mich wundert es, daß bei 64.xx und 2048.xx der Rechenfehler sich nicht > 'verstärkt'. > in der schleife ergibt 545.34 - 545.33 = 0.010000000000105 > ohne schleife 545.34 - 545.33 = 0.0099999999999909 > > lustig ist auch das: > > 0.56-0.55 = 0.01 > 0.57-0.56 = 0.0099999999999999 > 0.58-0.57 = 0.01 > > ...wenn man die Variablen in " " gesetzt hat. > > merkwürdig auch, daß diese If-Abfrage immer zutrifft. > > $var1 = 0.34; > $var2 = 0.33; > for($i=0;$i<=3000;$i++) > { > $var1++; > $var2++; > $var3 = $var1-$var2; > if ($var3 != 0.01) print " $var1-$var2 = $var3\n<br>"; > } > > kömmt php mit der typzuweisung nicht klar?
php::bar PHP Wiki - Listenarchive