logolinkslogorechts

Rundungsfehler

Ich habe letztens in Java ein Programm zur Verwaltung und Darstellung zu Binärbäumen geschrieben und bin dabei auf einen Fehler gestoßen, der mich ziemlich erstaunte. Die Verwendung von Integern statt Floats hat bei der Darstellung weitreichende Folgen:

Darstellung mit Rundungsfehler

Durch Rundungsfehler verzerrte Darstellung des Baumes
Dieser Baum ist im unteren Bereich stark verzerrt.

Darstellung ohne Rundungsfehler

Darstellung des Baumes wie sie sein soll
Wohingegen dieser Baum gut aussieht.
Mich hat erst ziemlich gewundert, dass der Unterschied so stark ist, da eigentlich Bruchteile von Pixeln zu klein sind um in den Blick zu fallen - Pustekuchen. Da ich die Positionen jedoch rekursiv ausgerechnet habe potenzierten sich die Ungenauigkeiten und dadurch, dass dies sehr oft geschieht, gibt es einen großen Verlust an Präzision.

Fazit

Was ist nun das Fazit? Definitiv ist eine Erkenntnis, dass es wichtig ist, sich Gedanken zu machen, welche Datentypen man braucht und wann die richtige Stelle ist um auf zusätzliche Information zu verzichten. Meist ist es wohl eine gute Idee erst so spät wie möglich zu runden.