phpbar.de logo

Mailinglisten-Archive

[php] Auktionssystem auf PHP / mySQL Basis

[php] Auktionssystem auf PHP / mySQL Basis

Sebastian Bergmann s.bergmann_(at)_seven-sense.com
Sun, 20 Feb 2000 08:41:01 +0100


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