Sven Rautenberg: 2 - 2 <> 0 !???

Beitrag lesen

Aloha!

Zum rechnen muss ich aber mit

if($erg == 0) { ... }

feststellen, ob $erg null ist -- und das ist in diesem Fall leider nicht der Fall (obwol es logisch ist das 2 - 2 = 0 !!!)

Es ist ein altbekanntes Problem, dass Rechner mit Gleitkommazahlen zwar rechnen können, dabei aber zumeist Rundungsfehler entstehen.

Das ist im Normalfall nicht weiter schlimm (obwohl man dennoch vermeiden sollte, auf das exakte Treffen eines Wertes zu hoffen), aber wenn sich der Wert nahe Null bewegt, entstehen zusätzliche Möglichkeiten, die Zahl immer kleiner werden zu lassen, immer näher an Null heranzuführen, aber Null selbst niemals zu erreichen.

Auf deutsch: Entweder rechtest du mit Integer-Werten (und wenn du Währungen verwendest, rechne in Pfen^H^H^H^HEuroCent und dividiere zur Ausgabe durch 100) - dann hast du keine Rundungsfehler. Oder du subtrahierst zwei annähernd gleich große Zahlen und prüfst nicht, ob sie gleich Null sind, sondern ob die Differenz kleiner als ein recht kleiner Wert ist (also nahe Null).

if ($zahl1 - $zahl 2 < 0.0000000001){ //Zahlen sind fast gleich groß }

- Sven Rautenberg