phpbar.de logo

Mailinglisten-Archive

[php] round() ?

[php] round() ?

Stefan Engelhardt Stefan.Engelhardt_(at)_stud.fh-hannover.de
Fri, 17 Mar 2000 12:48:27 +0100


Hallo Arne,
> Kann mir jemand die LOGIK dahinter erklären ???
>
> Rein mathematisch ist 449.00 - 488.99 = 0.009999999999999
> schlichtweg FALSCH.
> Das man mit runden das wieder gerade biegen kann is mir klar,
> nur wieso ist der Computer (oder php ? weil in pascal geht das
> ohne rumfummeln ) anscheinend  zu doof das richtig zu berechnen ??
Das hängt mit der internen Darstellung von Gleitkommazahlen zusammen.
Angenommen, Du hast Du hast eine 4-Byte-Gleitkommazahl, in der die
letzten acht Bit den Exponenten darstellen. In den ersten 24 Bit steckt
dann der Dezimalwert. Allerdings wird eine 0,5 dann als 2hoch-1
dargestellt. 0,25 als 2hoch-2 und so weiter. Theoretisch könnte man das
bis in die Unendlichkeit fortführen, praktisch natürlich nicht.
Irgendwann kommt dann der Punkt, wo eine Ungenauigkeit auftritt. Das ist
dann die Stelle, wo eine für uns Menschen einfache Differenzbildung den
Computer ungenau werden lässt. Testen kannst Du das Ganze, indem Du die
Dezimalzahl so auswählst, daß sie genau durch negative Potenzen von 2
darstellbar ist. Sobald Du diesen Wert, dann aber um 0,0....01
veränderst, bekommst Du wieder Deinen Rundungsfehler.

Ich hoffe, ich konnte mich verständlich ausdrücken.

> und irgendwas, und sei es noch so klein, hinzuzufügen, ist so
> ziemlich das DRECKIGSTE was man machen kann... (imho)
Hast Du nicht unrecht.

Grüße aus dem verregneten Hannover
Stefan



php::bar PHP Wiki   -   Listenarchive