Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Rundungsdifferenz? Fließkommathematik?

Forumthread: Rundungsdifferenz? Fließkommathematik?

Rundungsdifferenz? Fließkommathematik?
14.05.2024 12:23:06
{Boris}
Hallo zusammen,

mich hat vorhin eine Formel komplett in den Wahnsinn getrieben, weil sie einfach nicht das gemacht hat, was ich erwartet habe.
Habe das dann mal etwas eingrenzen können auf folgendes Beispiel.

Im Prinzip geht es um die Formeln in D2 und D5. In D2 ermittle ich, wie viele unterschiedliche Einträge es im Bereich B2:B6 gibt. Habe auch extra mal ein paar Nachkommastellen angezeigt.
Für die Formel in D5 (WIEDERHOLEN) ist der Wert aber offensichtlich nicht 2, denn das "A" wird nur 1 mal wiedergegeben.

In D3 hab ich die Selbe Formel dann mal mit GANZZAHL umrandet - und siehe da: Die korrespondierende Formel in D6 funktioniert dann einwandfrei.

Anbei anbei ein Bild sowie die Beispieldatei.

Wo liegt hier genau der Hase im Pfeffer?

Danke vorab für Euren Input.

Userbild

Hier die Datei dazu: https://www.herber.de/bbs/user/169448.xlsx

VG, Boris
Anzeige

40
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 12:59:50
daniel
keine ahnung.
interessanterweise tritt der Fall nur auf, wenn du das Verhältnis 2 zu 3 hast.
bei 1 zu 4 ist das Ergebnis wie erwartet.
ich würde hier auf einen Sonderfall der Fließkommaarithmethik in kombination mit einer Rundung tippen.
prinzipiell ist ja nicht auszuschließen, dass die hier verwendete Textfunktion intern etwas anders rundet als andere Funktionen.
aber wie gesagt, ist nur eine Vermutung.
Gruß Daniel
Anzeige
Rest = 1 / AW: Rundungsdifferenz
14.05.2024 13:56:06
tobias
Ich habe es mir gerade kurz angesehen.

Was mir auffällt:

=REST(D2;1) = 1


Vielleicht habe ich später noch eine Erklärung dafür...

Viele Grüße,
tobias
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 22:39:11
Uduuh
Hallo,
anstatt eure uralte (Matrix-) Formel würde ich heute
=ANZAHL2(EINDEUTIG(Bereich))
benutzen.

Gruß aus'm Pott
Udo
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 08:18:31
{Boris}
Hi Udo,

die hatte ich auch genutzt, bis die Frage aufkam, ob das auch für xl2016 geht. Und dann begann mein Wahnsinn 😉

VG Boris
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 12:28:50
{Boris}
Hi,

nur der Vollständigkeit halber:

Wenn Leerzellen vorkommen können, liefert EINDEUTIG dafür (für alle) eine einzelne Null. Die muss man dann noch ausfiltern:

=LET(e;EINDEUTIG(Bereich);FILTER(e;e>""))

VG, Boris
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 18:32:12
daniel
ja, aber darum gehts hier nicht.

die Frage ist, warum =1/3+1/3+1/3+1/3+1/3+1/3 von Excel von einigen Funktionen als glatte 2 erkannt wird (Ganzzahl, Abrunden)
während die Textfunktionen wie Wiederholen oder Teil diesen Wert auf 1 abrunden.

die Erklärung kann eigentlich nur sein, dass Mathematische Funktionen mit dem Gleitkomma-Problem anders umgehen, als Textfunktionen.


Gruß Daniel
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 18:45:15
{Boris}
Hi Daniel,

die Erklärung kann eigentlich nur sein, dass Mathematische Funktionen mit dem Gleitkomma-Problem anders umgehen, als Textfunktionen.

Dagegen spricht allerdings =REST(D2;1) = 1
Das ist ja keine Textfunktion.

VG, Boris
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 18:48:23
Onur
Aber wenn Excel 1,9999999999 als 2 ansieht, dann sieht er 0,999999999999999 auch als 1 an - oder?
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 18:53:55
{Boris}
Hi Onur,

ich wollte damit nur sagen, dass REST halt keine Textfunktion ist.

VG, Boris
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 18:56:13
Onur
Deswegen kommt auch nicht 0 dabei heraus, sondern 1. Oder verstehe ich etwas falsch?
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 19:05:39
{Boris}
Hi Onur,

TEXT und WIEDERHOLEN werten das Ergebnis ja als 1 (weil intern wohl ne 1,99999999999 vorhanden ist, was abgerundet wird).

Aber REST macht offensichtlich das Selbe - rundet das Ergebnis dann aber wieder auf 1 auf...?!

Wenn die Vermutung stimmen würde, dass die TEXTfunktionen anders mit dem Ergebnis umgehen, dann hätte ich von =REST(D2;1) als Ergebnis 0 erwartet - aber das ist halt nicht der Fall.

VG, Boris
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 19:10:15
Onur
Rest(1,999999999;1) ist doch 0,9999999999 und das aufgerundet ist 1.
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 19:18:12
{Boris}
Nochmal:
Wenn NUR die Textfunktionen das Ergebnis als 1,99999999 werten würden, dann müsste REST (ist ja keine Textfunktion) das Ergebnis als 2 werten - und somit Rest 0 ergeben.
Aber offensichtlich wertet auch REST das Ergebnis als 1,9999999999 - was damit der Vermutung von Daniel widerspricht, dass nur die Textfunktionen dieses Verhalten zeigen.
Mehr wollte ich da gar nicht anmerken.

VG, Boris
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 19:42:45
Onur
Ich glaube, dass es einfach nur davon abhängt, was für Datentypen die jeweilige Funktion als Parameter erwartet - egal ob Text- oder eine sonstige Funktion.
Schau mal hier:
https://www.herber.de/bbs/user/169493.xlsx
AW: Rundungsdifferenz? Fließkommathematik?
15.05.2024 20:13:47
{Boris}
Das kann ja auch so sein. Dann haben die Textfunktionen dabei aber keine explizite Sonderstellung.

Fazit: Funktionen (egal welcher Kategorie) greifen unterschiedlich auf das Ergebnis zu (bzw. verlangen unterschiedliche Datentypen, die dann evtl. abgerundet werden).
Die "Keulen-Lösung" hast Du ja schon geschrieben ("Genauigkeit wie angezeigt").
Und wenn man die Keule nicht möchte, dann muss man halt mit solchen "Ausreißern" leben.

Für mich reicht das vollkommen als "Fazit". Der Thread hat mir auf jeden Fall sehr viel gebracht!

VG, Boris
Anzeige
E15-Umgebung (Nachtrag)
15.05.2024 21:39:16
tobias
Guten Abend,

bei so viel Tech-Talk möchte ich noch einen Nachtrag einbringen: Die E15-Umgebung von Excel. Damit meine ich die Kommastelle, bei der Excel "wackelig" wird.

Folgendes Beispiel erzeugt ebenfalls eine "falsche Zwei":

https://www.herber.de/bbs/user/169496.xlsx

Vielleicht verspürt jemand Lust, dem Excel-Geheimnis tiefer nachzugehen. Mein Forschungsansatz dazu wäre, die Rechnungen binär nachzubilden... dann sollte zumindest der "Bit-Kipper" sichtbar werden. Möglicherweise tut sich dann ein zweiter "Sommer 1995" auf, als Intel uns mit der Erkenntnis überraschte: 3,00 - 3,01 = - 0,0 (q.e.d.?!).

Viele Grüße in die Runde!

tobias
Anzeige
AW: E15-Umgebung (Nachtrag)
15.05.2024 22:47:09
Daniel
ja ist klar.
das ist mit "Fließkommaarithmetik" gemeint.
wobei dein Beispiel was anderes zeigt.
als 0,0.........01 kann Excel schon sehr kleine oder sehr große Zahlen darstellen (Grenze ist 10^309)
die 15 Stellen sind nicht an das Komma gebunden, sondern können "frei" in diesem Raum verschoben werden.

dh die 1,1111111E-15 ist schon korrekt darstellbar, aber eben nur solange überall die 0 steht.
wenn aber vorne werte stehen, müssen hinten welche wegfallen.

wie gesagt, die Frage ist, warum es Funktionen gibt, die eigentlich das gleiche machen (nämlich abrunden), hier unterschiedlich reagieren.

Gruß Daniel
Anzeige
Auch spannend...
14.05.2024 13:59:38
{Boris}
Hi Tobias,

da wird dann im Prozessor doch irgendwas "Krummes" liegen, worauf wohl manche Funktionen anders zugreifen als andere.

VG, Boris
1,10E-16 / AW: Auch spannend...
14.05.2024 21:21:28
tobias
Hallo Boris,

inzwischen konnte ich ein paar Unterlagen durchsehen. Folgendes kann ich zu Deiner Frage noch beitragen:

1. Die Funktion WIEDERHOLEN erfordert als zweites Argument zwar einen "double"-Wert. Gerechnet wird jedoch laut Excel mit "integer"-Genauigkeit, Nachkommastellen werden einfach trunkiert. Das entspricht auch Deiner Beobachtung "A" vs. "AA" (und der Debug-Ausgabe von Der Steuerfuzzi).

2. Wenn ich Deine Berechnung gegenprüfe, gelange ich zu einer Differenz von 0,00000000000000011 (wissenschaftlich formatiert: 1,10E-16, mein Betreff), um die die Beinahe-2 von der Ganzzahl-2 abweicht.

3. Microsoft weist in seiner Dokumentation darauf hin, dass die Rechengenauigkeit von Excel bei 14 Nachkommastellen endet (so auch der Hinweis von Sigi.21). Dagegen ist der kleinste (positive) rechenbare Wert in Excel, der größer als Null ist, der Wert 2,2251E-308. Den Unterschied zwischen Rechengenauigkeit und Wertgenauigkeit zeigt (beispielsweise) dieser Test:

=1/10^16>0 // ist erwartungsgemäß WAHR (Grund: Zahlengenauigkeit, Wert >2,2251E-308) 

=(1+1/10^16)=1 // ist ebenfalls WAHR (Grund: Kommarundung)


4. Ich hatte vor längerer Zeit mal ähnliche Beobachtungen zur Rundungsungenauigkeit in Excel, als ich Buchhaltungsdaten mit Aufteilungen und Verrechnungen bearbeitete. Mir war das damals als nervig aufgefallen - und hatte es durch den zahlreichen Gebrauch der RUNDEN()-Funktion gelöst. Möglicherweise (!) neigt die Matrix-Formelfunktion in Excel dazu, Rundungsungenauigkeiten fortzuführen. Hierzu wären jedoch wohl weitere Funktionstests nötig.

Mein Fazit: Dein Problem bleibt spannend, weil es eine Pseudo-Zwei erzeugt. Und es zwingt dazu, das "kleingedruckte" in der Programmdokumentation von Excel zu lesen.

Ich hoffe, meine Hinweise helfen Dir ein wenig weiter - ergänzend zu den großartigen Hinweisen, die unter Tage bereits hier geschrieben wurden.

Viele Grüße,
tobias
Anzeige
AW: 1,10E-16 / AW: Auch spannend...
15.05.2024 09:33:38
{Boris}
Hi Tobias,

danke Dir sehr für Deine ausführlichen Recherchen / Antworten! Das ergibt für mich alles Sinn.
Und vielleicht hat es Dir und den anderen ja auch etwas "gebracht", sich etwas "tiefer einzugraben" :-)

Von meiner Seite hab ich jetzt auf jeden Fall genügend Klarheit / Infos!

Viele Grüße

Boris
Anzeige
AW: Rest = 1 / AW: Rundungsdifferenz
14.05.2024 14:03:28
Der Steuerfuzzi
Habe mal in der VBE im Direktfenster
?Range("D2").Value  2
eingegeben. Das Ergebnis ist "Wahr"
bei
?Range("D2").Value = 2
kommt als Ergebnis "Falsch"
bei
?Range("D2").Value
kommt als Ergebnis 2 (ohne Nachkomma oder was auch immer)
Anzeige
AW: Rest = 1 / AW: Rundungsdifferenz
16.05.2024 13:47:51
Der Steuerfuzzi
Die Erklärung ist, dass REST keine Ganzzahlen erwartet.
So ergibt REST(1,2;1) = 0,2
Anscheinend rundet REST auf 8 Nachkommastellen, so dass REST(1,999999999) = 1 ergibt. REST(1,999999994;1) ergibt nämlich 0,99999999.

AW: Rest = 1 / AW: Rundungsdifferenz
14.05.2024 14:06:48
Der Steuerfuzzi
Nochmal ein Test:
Sub Test()

Dim a As Single
Dim b As Double
Dim c As Variant
a = Range("D2").Value
b = Range("D2").Value
c = Range("D2").Value
Debug.Print a 2
Debug.Print b 2
Debug.Print c 2

End Sub

Ausgabe:
Falsch

Wahr
Wahr
Anzeige
Sehr gut...
14.05.2024 14:15:42
{Boris}
Hi,

...das paart sich mit der Annahme/Aussage von Onur, dass manche Funktionen unterschiedliche Datentypen verlangen.

Aber auf so was muss man erst mal kommen - tolle Diskussion hier! :-)

VG, Boris
AW: Sehr gut...
14.05.2024 14:38:10
Der Steuerfuzzi
Zur WIEDERHOLEN-Funktion:
https://support.microsoft.com/de-de/office/wiederholen-funktion-04c4d778-e712-43b4-9c15-d656582bb061

Zitat: "Multiplikator Erforderlich. Eine positive Zahl, die angibt, wie oft "Text" wiederholt werden soll ... Ist "Multiplikator" keine ganze Zahl, werden deren Nachkommastellen abgeschnitten."

Intern ist die Zahl wohl eine Long-Zahl (Beim Datentyp Variant wird die Variable bei Zuweisung auf Long gesetzt), die durch die Rundungsdifferenz geringfügig kleiner ist als 2 wird. Bei Übergabe wird abgeschnitten, so dass eine 1 übrig bleibt.
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:14:46
{Boris}
Hi Daniel,

vielen Dank für Deine Einschätzung!
Wahrscheinlich werden wir es nicht akribisch belegen können - aber Deine Vermutung, dass die Textfunktion hier etwas anders rundet (wie und warum auch immer) scheint möglich zu sein, denn für alle anderen Rechenoperation ist D2=2 und nix "Krummes" oder so.

Viele Grüße

Boris
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:32:47
BoskoBiati2
Hi Boris,

in dem speziellen Fall ist der Wert in D2 für WIEDERHOLEN wohl 2 (=1/(2-d2) ergibt eine 16stellige positive Zahl)), was offensichtlich dann abgerundet wird. Warum und wieso weiß wahrscheinlich nur der Prozessor. Bei Ganzzahl oder KÜRZEN scheint das ohne Belang zu sein.
Das Phänomen tritt auch nur auf, wenn eine der beiden Zahlen in ungerader Anzahl vorliegt, aber auch nicht bei jeder Kombination.
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:36:05
{Boris}
Hi Edgar,

danke auch Dir für Deinen Input!

Warum und wieso weiß wahrscheinlich nur der Prozessor

Dabei wird es am Ende wahrscheinlich bleiben ;-)

VG, Boris
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:26:10
Sigi.21
Hallo Boris,

wenn du nur " =ZÄHLENWENN(B2:B6;B2) " nimmst, dann geht es.
Ich denke, das hängt schon mit der Division (1/Zählenwenn ..) zusammen. Es ist halt trotz 15 Nachkommastellen nicht in der Anzeige sichtbar. Ich habe ähnliches mit schon größer/kleiner-Vergleichen erlebt.

Gruß Sigi
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:38:31
Der Steuerfuzzi
Hallo,

komisch ist, dass sowohl ein umschließendes AUFRUNDEN als auch ABRUNDEN auf 0 Stellen den Wert 2 ergibt. Ich hätte erwartet, dass ABRUNDEN den Wert 1 ergibt. Scheint wirklich irgendeine Eigenheit der WIEDERHOLEN-Funktion zu sein.

Gruß
Michael
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:42:09
{Boris}
Hi Michael,

ja, das ist wirklich alles ein wenig merkwürdig. Wir müssten mal den Programmierer zur WIEDERHOLEN-Funktion befragen. Aber das wird wohl am Ende nicht klappen ;-)

Aber dieses Verhalten hatte mich in meiner eigentlichen Anwendung / Aufgabe wirklich in den Wahnsinn getrieben...

VG, Boris
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:57:37
BoskoBiati2
Hi,

ich muß mich allerdings dahingehend korrigieren, dass es unabhängig von der Anzahl der Zahlen zu dem Effekt kommt, sogar in Fällen, in denen 1/(2-D2) einen negativen Wert ergibt, also D2 >2 ist:

https://www.herber.de/bbs/user/169452.xlsx
Anzeige
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 14:02:39
Onur
Einige Funktionen brauchen und erwarten wohl explicit Integer bzw Long-Zahlen, so wie diese z.B. (teste mal):
=TEIL("abcd";Z2S4;Z2S4)
Ich glaube, wir kommen der Sache näher...
14.05.2024 14:12:45
{Boris}
Hi Onur,

...ist schon ein spannendes Verhalten.
Und dass es mit der krummen Ergebnismatrix =SUMME({0,5;0,5;0,333333333333333;0,333333333333333;0,333333333333333}) zusammenhängt, scheint zudem offensichtlich.
Aber auf solche Fallstricke muss man erst mal kommen ;-)

VG, Boris
Anzeige
Long / AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 21:38:25
tobias
...wird nach meinem Kenntnisstand erwartet, korrekt.

Viele Grüße,
tobias
AW: Ich glaube, wir kommen der Sache näher...
14.05.2024 14:24:19
Onur
Und alle Probleme sind weg, sobald du bei
Optionen/Erweitert/Beim Berechnen diese Arbeitsmappe
bei "Genauigkeit wie angezeigt" einen Haken setzt. :)
AW: Ich glaube, wir kommen der Sache näher...
16.05.2024 12:32:07
Der Steuerfuzzi
Das Thema ist wirklich sehr spannend.

Mir geht die interne binäre Darstellung von Gleitkommazahlen nicht aus dem Kopf. Denn nur weil der Bruch 1/3 im Dezimalsystem nicht exakt dargestellt werden kann, heißt das nicht, dass es in Binärform genauso ist. Ich weiß, dass 0,0001 in binär nicht exakt dargestellt werden kann. Ich habe das mal in VBA getestet:
Sub test()

Dim Summe
Dim i As Integer
'Berechnung 1/3
Summe = 0
For i = 1 To 3
Summe = Summe + 1 / 3
Next
Debug.Print Summe
'Berechnung 0.0001
Summe = 0
For i = 1 To 10000
Summe = Summe + 1 / 10000
Next
Debug.Print Summe
End Sub

Ausgabe:
 1 

0,999999999999906

Hier gibt es bei 3 * 1/3 keine Differenz. Daher erscheint mir das Verhalten doch recht merkwürdig.

Bei meinen ersten Versuchen ist herausgekommen, dass bei Übernahme der Zahl aus der Beispieldatei als Double der Wert als kleiner 2 dargestellt wurde und bei Single als genau 2. Daher habe ich die folgende Summenformel in eine Zelle geschrieben:
=SUMME(1/3;1/3;1/3;1/2;1/2)


Das ist im Prinzip eigentlich identisch mit der Matrixformel von Boris. Wenn ich den gleichen Test hier mache, wird weder bei Single noch bei Double die Zahl als kleiner 2 interpretiert.

Jetzt habe ich die Formel umgestellt:
=SUMME(1/2;1/2;1/3;1/3;1/3)


Es scheint also mit irgendwelchen Zwischenergebnissen zusammenzuhängen.

Zur Veranschaulichung habe ich mir auch mal die interne Speicherung der Zahl angesehen.
Zuerst die Zahl aus der Beispieldatei von Boris. Im Speicher sieht das ganze so aus:
Double:
Hex: 3F FF FF FF FF FF FF FF Binär: 00111111 11111111 11111111 11111111 11111111 11111111 11111111 11111111
Dezimal: 1.9999999999999997779553950749686919152736663818359375
Single:
Hex: 40 00 00 00 Binär: 01000000 00000000 00000000 00000000
Dezimal: 2

Und hier die Variante mit der Formel =SUMME(1/3;1/3;1/3;1/2;1/2), bei der der Fehler nicht auftrat. Hier sieht das ganze so aus:
Hex: 40 00 00 00 00 00 00 00 Binär: 01000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Dezimal: 2
Single:
Hex: 40 00 00 00 Binär: 01000000 00000000 00000000 00000000
Dezimal: 2

Jetzt war ich neugierig. Folgende Funktion in VBA ergibt das gleiche Problem:
Sub test()

Dim Summe1 As Double
Dim Summe2 As Single
Dim i As Integer
Summe1 = 0
Summe2 = 0
For i = 1 To 2
Summe1 = Summe1 + 1 / 2
Summe2 = Summe2 + 1 / 2
Next
For i = 1 To 3
Summe1 = Summe1 + 1 / 3
Summe2 = Summe2 + 1 / 3
Next
Debug.Print Summe1
Debug.Print Summe1 = 2
Debug.Print Summe2
Debug.Print Summe2 = 2
End Sub

Ändert man auch hier die Reihenfolge (also erst die 1/3 und dann die 1/2) wird wieder alles korrekt als 2 ausgegeben.

Es erschloss sich mir nicht, warum die zweimalige Addition von 1/2 zuerst den Fehler verursacht und danach nicht. Daher habe ich die Zahlen mal schrittweise addiert. Da die Summe aus 1/3 + 1/3 + 1/3 sowie 1/2 + 1/2 jeweils unstrittig das identische Ergebnis 1 ergeben haben und das auch binär übereingestimmt hat, bin ich von 1 ausgegangen und habe dann jeweils die fehlenden Werte dazu addiert:

1 + 1/3 ergibt folgendes Zwischenergebnis:
Hex: 3F F5 55 55 55 55 55 55 Binär: 00111111 11110101 01010101 01010101 01010101 01010101 01010101 01010101
Dezimal: 1.3333333333333332593184650249895639717578887939453125

Während 1/3 wie folgt aussieht:
Hex: 3F D5 55 55 55 55 55 55 Binär: 00111111 11010101 01010101 01010101 01010101 01010101 01010101 01010101
Dezimal: 0.333333333333333314829616256247390992939472198486328125

Hier sieht man schon, dass die 16. Nachkommastelle bei beiden Dezimaldarstellungen bereits abweichen. Die weiteren Berechnungen haben dann das Ergebnis oben bestätigt. Anscheinend bewirkt die Addition von 1/3 auf 1 bereits eine Ungenauigkeit aufgrund der internen Gleitkommaberechnungen.

Bei der Addition von 1/2 auf 1 passiert hier nichts, so dass es hier nicht zu dieser Ungenauigkeit kommt.

Das ganze kann man ganz gut auf dieser Seite nachvollziehen:
https://zahlensysteme-rechner.de/ieee-754-addieren/

Wenn man die Zahlen binär eingibt (1 und 1/3) wird beim Rechenweg kurz erläutert, dass nach dem Addieren der 64 bit-Repräsentation zwei Bits weg müssen und die Zahl damit abgerundet wird und das wiederholt sich bei den 2 weiteren Additionen. Somit kommt es zur Differenz/Ungenauigkeit.
Bei der 32-bit Repräsentation kommt es bei den ersten beiden Schritten nicht zum abrunden, sondern jeweils zum aufrunden und beim letzten Schritt zum abrunden. Damit gleicht sich das aus und das Ergebnis ist genau 2.

s scheint also logisch, dass bei der Umwandlung in eine Ganzzahl die Nachkommastellen wegfallen. Damit sind wir wieder bei der Annahme, dass es grundlegend darauf ankommt, wie die Funktion die Eingangsparameter interpretiert.

Dass bei Rest eine "anomalie" besteht, macht ist für mich deshalb logisch, da Rest keine Ganzzahl erwartet, sondern mit Nachkommastellen arbeitet. So ergibt z. B. Rest(1,2;1) = 0,2
Rest(1,999999999999999;1) wäre dann 0,999999999999999 aber Rest rundet anscheinend bei 9 Nachkommastellen auf, denn Rest(0,99999999;1) = 0,99999999 aber Rest(0,999999999;1) = 1

Grüße
Michael

Anzeige
AW: Ich glaube, wir kommen der Sache näher...
16.05.2024 13:45:16
Der Steuerfuzzi
Ich habe irgendwie einen Satz vergessen zu schreiben.

Es betrifft den Teil bei dem ich die beiden Summenformeln vergleiche, also
=SUMME(1/3;1/3;1/3;1/2;1/2)
und
=SUMME(1/2;1/2;1/3;1/3;1/3)

Wenn die 1/3 zuerst und die 1/2 zuletzt addiert werden, dann besteht das Problem nicht und es kommt genau 2 heraus, werden aber zuerst die 1/2 addiert und dann die 1/3 dann ergibt die Summe 1.9999999999999997779553950749686919152736663818359375.
Anzeige
AW: Ich glaube, wir kommen der Sache näher...
14.05.2024 14:28:00
{Boris}
Hi Onur,

...auch ein sehr guter Hinweis!

VG, Boris
AW: Rundungsdifferenz? Fließkommathematik?
14.05.2024 13:34:25
{Boris}
Hi,

ja, bei den 3 Dreiern ergibt es ja 0,3333333 + 0,33333333 + 0,3333333 - und das ist am Ende halt nicht genau 1.
Daran wird es wohl liegen. Allerdings scheint SUMME das ja korrekt zu runden - zumindest für weitere mathematische Operationen. Nur WIEDERHOLEN scheint da beim Parameter "Multiplikator" irgendwie anders zu ticken - das ist zumindst die bislang für mich einleuchtendste Erklärung.

VG, Boris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige