Berechnung ergibt nicht Null

Bild

Betrifft: Berechnung ergibt nicht Null
von: Frank
Geschrieben am: 20.11.2015 08:38:26

Guten Morgen an Alle,
ich habe ein kurioses Problem und wollte fragen ob sich das jemand erklären kann. Ich habe in eine Funktion in VBA zwei Variablen (a und b) vom Typ Double. Während der Berechnung kommt für beide Werte exakt 0,004 raus. Anschließend rechne ich a-b und es kommt 5,97E-20 raus und eben nicht Null. Gut das ist zwar fast Null, aber wie kann man dieses Ergebnis erklären? Mache ich den selben Rechengang in Excel selbst, dann kommt genau Null raus.
Ich bin gespannt, ob mir jemand was dazu sagen kann.
Vielen Dank und viele Grüße
Frank

Bild

Betrifft: Wikipedia: IEEE 754 oder Recherche (owT)
von: EtoPHG
Geschrieben am: 20.11.2015 08:48:53


Bild

Betrifft: AW: Wikipedia: IEEE 754 oder Recherche (owT)
von: Frank
Geschrieben am: 20.11.2015 09:19:41
Vielen Dank EtoPHG,
mit diesem Problem hatte ich bisher noch nicht zu tun, aber gut zu wissen. Und für sowas gibt es noch keine Lösung? Also ich habe mir das Beispiel bei Wikipedia angesehen. Man rechnet eine Gleitkommazahl in eine binäre Zahl um und anschließend wieder zurück und es ergibt sich nicht die selbe Zahl...
Was würdest du denn empfehlen ab welchem Zahlenwert man das Ergebnis zu Null setzt?`
Sagen wir:

Ergebnis = a-b
If Ergebnis <= 1E-18 Then
 Ergebnis = =
Else
 Ergebnis
End If
Viele Grüße
Frank

Bild

Betrifft: Empfehlung Runden
von: EtoPHG
Geschrieben am: 20.11.2015 09:50:44
Hallo Frank,
Du kannst die Frage nicht so stellen: ab welchem Zahlenwert man das Ergebnis zu Null setzt
Du musst hingegen die Frage beantworten, bis zu welcher Genauigkeit dein Resultat wichtig ist.
Die allgemeine Empfehlung heisst darum:

IF ROUND(a,AnzahlStellenDerGenauigkeit) = ROUND(b,AnzahlStellenDerGenauigkeit) Then
 a und b sind gleich
Else
 a und b sind ungleich
End If
Wenn du dich daran hälst, kannst du auch WF's Beispiel widerlegen, nämlich mit
=RUNDEN((2+0.06-2)*100;0)
=RUNDEN((4+0.06-4)*100;0)
Gruess Hansueli

Bild

Betrifft: AW: Empfehlung Runden
von: Frank
Geschrieben am: 20.11.2015 15:56:27
Hallo Hansueli,
vielen Dank für deine ausführliche Antwort. Ich werde das so umsetzen.
Ich wünsche dir ein schönes Wochenende.
Viele Grüße
Frank

Bild

Betrifft: anderes Beispiel ohne Rundung
von: WF
Geschrieben am: 20.11.2015 16:57:49
=REST(2,06*1000;1)=0
und
=REST(4,06*1000;1)=0
WF

Bild

Betrifft: das ist die Fließkommaproblematik
von: WF
Geschrieben am: 20.11.2015 09:18:34
Hi,
gib mal ein =GANZZAHL((2+0,06-2)*100)
und nun =GANZZAHL((4+0,06-4)*100)
toll oder ?
WF

Bild

Betrifft: AW: das ist die Fließkommaproblematik
von: Frank
Geschrieben am: 20.11.2015 09:36:54
Hallo WF,
das ist ja witzig bzw. eigentlich nicht... :o). Kruioser Sachverhalt.
Wie soll man denn solch ein Problem umgehen? Normalerweise befasse ich mich nur mit der Berechnung im Allgemeinen, aber das ich nun das Rechenergebnis noch auf Richtigkeit hinterfragen muss...
Gibt es für die Fließkommaproblematik einen Lösungsansatz?
Viele Grüße
Frank

Bild

Betrifft: Problem umgehen: Runden. owT
von: Rudi Maintaire
Geschrieben am: 20.11.2015 09:50:52


Bild

Betrifft: das ist klar
von: WF
Geschrieben am: 20.11.2015 10:06:05
Hi,
wer denkt aber bei so einer simplen Berechnung an Rundung.
WF

Bild

Betrifft: Du: GANZZAHL = ABRUNDEN <> RUNDEN (owT)
von: EtoPHG
Geschrieben am: 20.11.2015 10:07:55


Bild

Betrifft: AW: das ist klar
von: Rudi Maintaire
Geschrieben am: 20.11.2015 10:10:48
Hallo,
vielleicht schon im Vorfeld bei der Berechnung von a und b.
Gruß
Rudi

Bild

Betrifft: AW: das ist klar
von: EtoPHG
Geschrieben am: 20.11.2015 10:20:58
Hallo Rudi,
Wieso im Vorfeld? WF widerlegt sich doch selbst:
wer denkt aber bei so einer simplen Berechnung an Rundung.
Er selbst, denn er benutzt eine RUNDUNGS-FUNKTION, aber eine FALSCHE!
GANZZAHL = Rundet eine Zahl auf die nächstkleinere ganze Zahl ab!
Gruess Hansueli ;-)

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Berechnung ergibt nicht Null"