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