Mathematik online lernen im Mathe-Forum. Nachhilfe online
Startseite » Forum » Excel meidet 0.05

Excel meidet 0.05

Schüler

Tags: differenz, Excel, falsch??

 
Antworten Neue Frage stellen Im Forum suchen
Neue Frage
Femat

Femat aktiv_icon

13:10 Uhr, 15.05.2017

Antworten
Ich habe einen Kopfrechentest erstellt.
Wer kann mir erklären, warum Excel in den ersten 2 Rechnungen die Differenz 0.05 nicht akzeptiert.
Sonst funktionniert die formel ganz ordentlich.
Danke im Voraus

Screenshot (536)

Für alle, die mir helfen möchten (automatisch von OnlineMathe generiert):
"Ich möchte die Lösung in Zusammenarbeit mit anderen erstellen."
Online-Nachhilfe in Mathematik
Antwort
Roman-22

Roman-22

14:00 Uhr, 15.05.2017

Antworten
Beim Arbeiten am Rechner mit Dezimalzahlen kommt es oft zu Rundungsfehlern - allein schon wegen der Konvertierung vom Dezimalsystem ins Binärsystem und retour.
Wie du im Screenshot in Zelle G2 siehst, ist A2-C2 für Excel nicht genau 0,05.

Daher soll man nie zwei float-Zahlen auf Gleichheit abfragen (if(Zahl1=Zahl2)...), sondern stattdessen prüfen, ob der Betrag der Differenz kleiner als eine passend gewählte kleine Konstante ist (if(|Zahl1-Zahl2|<10-8)...). Siehe Screenshot. Du prüfst also quasi, ob die beiden Zahlen fast (innerhalb einer Toleranz) gleich sind.

Diese 10-8 (oder im screenshot sind es 10-10) kannst du auch in einer Zelle eintragen und diese immer referenzieren, dann kannst du die Toleranz für das gesamte Blatt mit einem einzigen Eintrag ändern.

Excel1
Frage beantwortet
Femat

Femat aktiv_icon

14:10 Uhr, 15.05.2017

Antworten
Hi Roman
Du bist genial, wie immer!

Herzlichen Dank
Antwort
willyengland

willyengland aktiv_icon

14:20 Uhr, 15.05.2017

Antworten
Hallo Roman,

sehr interessant!
Wie bekommt man denn die genaue Angabe, die du in deiner Zelle G2 hast?
Femat

Femat aktiv_icon

14:52 Uhr, 15.05.2017

Antworten
Zum Beispiel so mit 30 Stellen formatieren

Screenshot (537)
Antwort
Roman-22

Roman-22

15:12 Uhr, 15.05.2017

Antworten
@ willyengland
> Wie bekommt man denn die genaue Angabe, die du in deiner Zelle G2 hast?
Einfach "=A2-C2" reinschreiben und mehr Nachkommastellen anzeigen lassen ( screenshot).
Du kannst dir auch in einer Zelle die Differenz anzeigen lassen (=A2-C2-E3) und siehst, dass sie im Bereich von -310-15 liegt. Das ist dann eben die Genauigkeitsgrenze von IEEE Zahlen.

@ Femat
Genial ist da nix, aber das Problem ist vom Programmieren her altbekannt.
in deinem Fall ist als alternative Lösung auch der RUNDEN Befehl denkbar:
=WENN(RUNDEN(A4-C4;2)=E4;"richtig";"falsch")


Excel2
Antwort
willyengland

willyengland aktiv_icon

16:06 Uhr, 15.05.2017

Antworten
Aha, danke!
Schon etwas seltsam, dass das heute immer noch ein Problem ist.
Antwort
Roman-22

Roman-22

18:21 Uhr, 15.05.2017

Antworten
Solange intern das Binärsystem genutzt wird und solange eine zahl nicht unendlich viel Speicherplatz belegen darf wird das wohl auch ein Problem bleiben.
Die harmlose Dezimalzahl 0,1 ist im Binärsystem eine periodische Zahl, lässt sich also im Rechner nicht exakt speichern, denn irgendwann müssen wir abschneiden. Wenn mit dieser Zahl nun weiter gerechnet wird und das Ergebnis dann für die Anzeige wieder ins Dezimalsystem zurückgewandelt wird, stellen sich zwangsläufig Rundungsfehler ein,
Wollte man das vermeiden, müsste man jede rationale Zahl intern als Quotient zweier ganzer zahlen abbilden und irrationale Zahlen nur symbolhaft (π,2,...). Dann muss man für diese spezielle Zahlendarstellung alle Rechenoperationen neu definieren und implementieren. Theoretisch lassen sich so beliebig große zahlen darstellen und Ergebnisse beliebig genau ermitteln - die Grenze ist der zur Verfügung stehende Hauptspeicher. Das ist ziemlich aufwändig und nur ein paar wenige spezielle Mathe-Programme gehen so vor. Ein 08/15 Programm wie eine Tabellenkalkulation verwendet schlicht die vorgefertigte Zahlendarstellung und -arithmetik, die vom verwendeten Compiler angeboten wird und das wird in aller Regel das IEEE-Gleitkomma-Zahlenformat sein.
de.wikipedia.org/wiki/IEEE_754
http//www.iti.fh-flensburg.de/lang/informatik/ieee-format.htm
de.wikipedia.org/wiki/Gleitkommazahl#IEEE_754_und_andere_Normen

Das heute üblicherweise verwendete doppelt genaue Format mit 52 Bit Mantisse und 11 Bit Exponent liefert eine Genauigkeit von ca. 16 Dezimalstellen und wie wir gesehen haben liegt der Fehler in Excels Ergebnis bei der simplen Subtraktion bereits genau in dieser Größenordnung.

Antwort
willyengland

willyengland aktiv_icon

20:20 Uhr, 15.05.2017

Antworten
Danke für die Aufklärung!
Also ist bei den beiden obigen "falschen" Rechenoperationen zufällig eine der Zahlen im Binärcode ungenau?
Antwort
Roman-22

Roman-22

21:54 Uhr, 15.05.2017

Antworten
Das ist vermutlich die Ursache.