Hallo.
In der aktuellen Ausgabe des PC-Pannenhelfers kam eine Lesertippfrage auf, ob Windows 10 richtig rechnen kann.
Dort ging es aber nur um die Sogenannte Punkt vor Strich Rechnung.
Aber wie sieht es mit echten Rechenfehlern aus.
Wenn man z.B. in Windows 7 rechnet: 2- Wurzel aus 4, dann sollte eigentlich 0 rauskommen.
Aber der Rechner von Windows 7 zeigt als Ergebnis das hier an:
8,1648465955514287168521180122928e-39
Hat der Rechner von Windows 10 auch diese Kinderkrankheit?
Kinderkrankheit deshalb, weil bei dieser Aufgabe alle Windows Systeme falsch rechnen. Egal ob der Rechner von Windows 2000 oder XP oder ein anderes Windows System.
MfG
MDuss
Hallo Herr Duss,
nun gibt es auf der Uni die Studienrichtung Numerische Mathematik, wo man lernt, mit solchen Erscheinungen umzugehen.
Es gibt zwei Ursachen für Ungenauigkeiten:
Die erste Ursache ist, dass der Rechner nur eine endliche Anzahl Binärstellen hat und daher das letzte Bit einer Berechnung ungenau ist. Bei den CPU von Intel und AMD, die in den PCs und Laptops verbaut sind, sind dies 80 Bit im Gleitkommaregister und 64 Bit im Hauptspeicher. Dadurch wird jegliche Berechnung nach 68 oder 136 binären Ziffern abgebrochen (12 bzw. 24 Bit werden für Exponent und Vorzeichen benötigt).
Mehr Genauigkeit ist mir einfachen Programmen nicht erreichbar!
Der Programmierer kann auch entscheiden (und die Entscheidung dem Anwender weitergeben) statt 64 nur 32 Bit zu speichern oder bei hoher Genauigkeit intern mit 2×80 Bit zu rechnen und 128 Bit zu speichern (die Anzahl Bits umfassen Mantisse, Exponent und Vorzeichen).
Die zweite Ursache für „Ungenauigkeiten“ liegt darin, dass bei der Umrechnung von Binärzahlen, die jeder Rechner intern verwendet, ins Dezimalsystem, das Menschen gelernt haben zu verwenden, periodische Brüche auftreten können, die dann im Dezimalsystem geeignet gekennzeichnet werden müssten. Meist wird jedoch nach einer Anzahl Ziffern abgebrochen. Periodische Brüche treten bei nur ganzen Zahlen und bei Brüchen, deren Nenner eine Zweierpotenz ist, nicht auf.
Da beim Abspeichern von Gleitkommazahlen aus dem Register 16 oder 48 Bit verloren gehen, kann der Programmierer es vorsehen, dass der Binärbruch vor dem Abspeichern gerundet wird. Wenn er das macht, ist das Ergebnis von Wurzel aus 4 eine glatte 2. Wenn man davon 2 subtrahiert, ist das Ergebnis 0.
Wenn er auf das Runden verzichtet, ist das Ergebnis dann 1,9999999…. (und viele Neuner mehr). Wenn wie in Ihrem Beispiel dann von der Zahl 2 – die Sie eintippen und die deshalb als Gleitkommazahl genau darstellbar ist – die berechnete Wurzel aus 2 subtrahieren, bekommt man ein Bit als Differenz, das als Dezimalzahl eben 8,16…*10^-39 ist. Das ist als Dezimalzahl geschrieben 0,0….(37 weitere Nullen)…816
Zusammenfassung:
Ein mit Gleitkommazahlen errechnetes Ergebnis ist immer ungenau!
Viele Grüße
Norbert Hahn