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,
das Ergebnis ist ja fast richtig, wenn man den Exponent -39 berücksichtigt und auf eine Dezimalstelle rundet 😉
Ja, der Rechner von Windows 10 hat auch diesen Fehler noch und das sogar im wissenschaftlichen Modus.
Sie können aber auf den Standardmodus umschalten und dann ist das Ergebnis 1,068281969439142e-19, denn dem Standard-Anwender will Microsoft wohl nicht so kleine Zahlen mit e-39 zumuten 😉
Rechnen Sie wissenschaftlich 2-(Wurzel 4) ändert sich am falschen Ergebnis nichts.
Hier eine Diskussion dazu, mit einer etwas anderen Gleichung (Wurzel aus 4 minus 2): https://www.delphipraxis.net/160544-windows-taschenrechner-problem.html
Ergebnis: Linux und MacOS sowie einige Mobiltelefone rechnen richtig, Windows wohl nie mehr (Windows 10 soll ja das letzte Windows sein).
Viele Grüße
Michael-Alexander Beisecker
Und was lernen wir daraus???
Alle Windows Entwickler zurück zur Schule, Mathematik für Anfänger neu belegen. 😉
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
Vielen Dank für die Ausführliche Erklärung.
Aber warum können dann handelsübliche Taschenrechner denn dann genauer Rechnen als ein PC, der ja eigentlich im vergleich über deutlich mehr Ressourcen verfügt um solche Rechenaufgaben durchzuführen.
Naja. Besser wir brechen ab, denn sonst könnte das ganze noch deutlich weiter ausarten.
MfG
MDuss
Hallo Herr Duss,
wenn Sie unter Windows mit einem Tabellenkalkulationsprogramm (ich habe LibreOffice verwendet) in Spalte 1 eingeben
=Wurzel(4)
bekommen Sie als Ergebnis 2 angezeigt – bei Standardformatierung. Wenn Sie die Anzeige auf „wissenschaftlich“ ändern, bekommen Sie 2,00E+000 angezeit. Wenn Sie in Spalte 2 eingeben
=A1-2
bekommen Sie 0 bzw. 0,00E+000 als Ergebnis.
Das Pseudo-Problem liegt nicht am PC sondern in der Arbeitsweise des Programms calc.exe von Microsoft.
Alle Programme, die bei diesem Beispiel eine glatte 0 anzeigen scheinen genauer zu rechnen. Da aber das letzte Bit grundsätzlich unsicher ist und das Programm calc.exe von Windows beim letzten Bit ein anderes Ergebnis hat, bedeutet das nicht, dass dieses Programm falsch rechnet.
Man beobachtet hier ein kosmetisches Problem, das man mit etwas Aufwand leicht beseitigen könnte – mit diesen Folgen:
1. das unsichere letzte Bit wird nur versteckt
2. calc.exe aus älteren Betriebssysteme von Windows würden bei gleicher Eingabe andere Ergebnisse bringen, da ältere Versionen dieses Programms nicht gepflegt werden.
Viele Grüße
Norbert Hahn