Mailinglisten-Archive |
Aloha,
> Von: Michael Hinrichs[SMTP:magic_(at)_blitztrade.de]
>
> ich bin gerade über einen Rechenfehler bzw. Rundungsfehler gestolpert.
....
> Fall 1 ergibt für c 0.86999999999999, Fall 2 0,88.
>
> Jetzt frag ich nicht, wie ich das Problem lösen kann (einfach runden),
> sondern warum es auftritt.
>
...
> Kann man sich denn heutzutage auf nix mehr verlassen ;-))
>
Doch das kann man .... wenn man sich auf eine solide Ausbildung in der
EDV berufen kann :-)
Grundsätzlich ist es so, daß die heute üblichen CPUs Integer
(== Ganze Zahlen in einem definierten Bereich) oder Gleitkommazahlen
direkt verarbeiten können. Beides wird nicht im Dezimalsystem, sondern
im Binärsystem durchgeführt.
==> Die von dir erwähnten Rechenschritte sind direkt mit keiner CPU
möglich.
==> Beide werden als Gleitkommaoperation ausgeführt.
==> Es gibt häufig Rundungsfehler (bei deinem Fall 2 zufällig nicht ;).
Auch die Verwendung der bc* - Funktionen (falls vorhanden) wird bei deinem
ersten Fall nur mehr 9999er hinter dem Komma liefern, nützt dir also auch
nichts ;-(
Zum Trost gibts aber zum Ausgeben sinnvoller Ergebnisse funktionen wie
number_format() und sprintf() / printf()
Grüße, Mathias
php::bar PHP Wiki - Listenarchive