Forum: Programmieren allgemein
by dizzy,
19. Dez 2005
Das Ergebnis ist sicher nicht x 8)
Ich habe hier schon mal 0.2 binär dargestellt, und es wurde periodisch. Unter der Annahme dass eine halbierte periodische Zahl weiterhin periodisch ist, würde dies auch auf 0.1d zutreffen. Dadurch passt die Mantisse nicht in die dafür vorhandenen Bits (müssten ja unendlich viele sein :stupid:), und schon allein das hinterlegen des Wertes "0.1" in der FPU...
Forum: Programmieren allgemein
by dizzy,
19. Dez 2005
Lösung des Problems (markieren zum Lesen):
Die 0 ist als Float (Single, Double, Extended, ...) garnicht darstellbar ;). Für die 0 wird in der FPU ein separates Flag pro Register mitgeführt, und es ist so gut wie nie der Fall, dass eine Berechnung exakt 0 ergibt (eben wegen der üblichen Ungenauigkeit bei Floats). Deswegen gilt auch: Prüfe ein Float nie dirket auf Gleichheit mit 0! (bzw....
Forum: Programmieren allgemein
by dizzy,
19. Dez 2005
Die Fragestellung zeugt meiner Meinung nach von Unsauberkeit des Profs. Die Zwischenergebnisse liegen bei weitem eben nicht im Genaugkeitsbereich von Double. Die konstanten Werte von x und y tun dies, aber nicht (3-x)! Da hat der gute wohl böse gepatzt :roll:
Forum: Programmieren allgemein
by dizzy,
19. Dez 2005
Das Problem lässt sich auf folgenden Teilterm verkürzen, in dem falsch gerechnet wird: (3-x)
Und da ist es ein Problem der Genauigkeit denke ich. x hat 31 Stellen, aber selbst Extended ist nur auf bis zu 20 Stellen genau. Somit wird intern durch Rundung aus (3-x) einfach (-x), da die 3 viel zu klein ist, um das Ergebnis signifikant zu ändern. Sie stünde nämlich weit hinter der 20. Stelle die...