Beiträge von Mac Bacon im Thema „Bug im Basic? Super Simpel aber hää?“

    Der Vollständigkeit halber: Das Problem hat mit der verwendeten Programmiersprache nichts zu tun, und es lässt sich auch nicht durch das Verwenden größerer Datentypen lösen.
    Zum Vergleich:
    Im gewohnten Dezimalsystem lässt sich die Zahl 1/3 nicht mit endlich vielen Dezimalziffern exakt darstellen. Das Gleiche gilt für 1/6, 1/7, 1/9, 1/11, ...
    Da das Binärsystem nun auf der Zahl 2 basiert und diese im Gegensatz zu der 10 des Dezimalsystems nicht den Primteiler 5 hat, lassen sich im Binärsystem nun z.B. auch die Zahlen 1/5 und 1/10 nicht mit endlich vielen Ziffern exakt darstellen.
    Es mag ungewohnt sein, aber: Ob eine Zahlendarstellung periodisch ist oder abbricht, liegt nicht am Wert der Zahl selbst, sondern an der Basis des verwendeten Zahlensystems. Im 3er-System wäre selbst der Wert 1/3 nicht mehr periodisch, sondern würde als "0.1" dargestellt. Dafür wäre dort dann 1/2 periodisch.
    BCD-Darstellung löst das Problem nicht; man erreicht damit lediglich, dass die Darstellungsprobleme auf die des Dezimalsystems reduziert werden. Bei 1/3 hilft es also nicht.

    Programmierer müssen sich dieses Problems bewusst sein und bei Bedarf eine entsprechende Lösung benutzen (z.B. statt mit gebrochenen Euro-Beträgen lieber mit ganzzahligen Cent-Beträgen rechnen), es gibt dafür keine Universallösung. Zwar gibt es für einige Programmiersprachen wie z.B. Python auch entsprechende Support-Libraries (die die Werte intern dann z.B. als Brüche behandeln), aber dann muss der Programmierer trotzdem noch wissen, in welchen Fällen er sie benutzen sollte.