Rundungsfehler in BASIC

  • Das liegt wohl ganz einfach daran, daß manche binären Fließkommazahlen mit gleicher Genauigkeit (Anzahl Bits pro Mantisse/Exponent) mal 8 und mal 9 stellige Dezimalzahlen darstellen.


    Andersrum gesehen:
    1000000 (7bits) = 64 (2 stellig)
    1110000 (7bits) = 112 (3 stellig)


    Das sollte Nachkommastellen wohl genauso betreffen.


    CU,
    Prodatron

  • Prodatron hat ganz recht. Die Anzahl der Nachkommastellen binär und dezimal kann unterschiedlich ausfallen.


    0,1111011 binär ergibt z.B. 0,48046875 dezimal.



    Andererseits spielt da auch die Rundung mit. Zahlen mit dezimal 9 Nachkommastellen sind häufig gerundet, denn ab 9 Stellen rundet BASIC. Eine Zahl mit 8 dezimalen Nachkommastellen ist aber nicht gerundet und entspricht daher der internen binären Darstellung gut.


    Wobei da der Teufel auch im Detail liegt. Einerseits rechnest du mit PI und SIN-Werten, die (fast alle) irrational sind. Die lassen sich in keinem Zahlensystem perfekt darstellen.
    Dann aber addierst du diese imperfekte Darstellung laufend, der Fehler pflanzt sich von den sehr niedrigen Stellen immer weiter zu höheren Stellen hinauf fort und wird schließlich bemerkbar. Das ergibt gelegentlich wahrscheinlich eine Rundung, die nur acht Stellen umfasst. Im nächsten Schritt wird dann aber bei derselben Zahl wieder eine irrationale Zahl draufaddiert, die wieder zu mehr als acht Stellen im Dezimalsystem führt und gerundet werden muss.


    Das Ganze ergibt ein komplexes Zusammenspiel zwischen der ungenauen Zahlenrepräsentation in Computern, der eigentlichen Rechentiefe des Zahlenformats, der Rundung dieses internen Zahlenformats und der Umwandlung vom binären ins dezimale System (und umgekehrt).


    Um für konkrete Beispiele eindeutige Gewissheit zu haben, was genau passiert, muss man wohl die Fließkomma-Algorithmen im Basic komplett verstanden haben, und dann Schritt für Schritt nachbilden können.


    Das einzige, was Computer halt richtig gut können, ist ganze Zahlen zu addieren und zu subtrahieren. Den Rest macht er eher mau, aber halt sehr schnell. Und die Bits richtig zu interpretieren ist Sache der Algorithmen und Menschen, die diese erdenken.