Rechenfehler (ungenauigkeit) bei Subtraktion?
Moderator: Moderatoren
Rechenfehler (ungenauigkeit) bei Subtraktion?
hi,
ich habe in einem komplexeren OO Calc sheet immer wieder rechenfehler gehabt. bis datto hab ich mir irgendwie mit funktionen wie runden etc. geholfen. nun würde es mich aber doch interessieren, woher der fehler kommt. dazu hab ich den sheet genau unter die lupe genommen. dabei bin ich auf einen simplen fehler bei einer subtraktion gestossen. ich gebe bspw. folgende formel in einer zelle ein:
=25000,24-25000
dann steht richtigerweise 0,24 drinn. ABER - wenn ich unter den zellenformatierung auf sagen wir 20 nachkommastellen anzeigen lasse, dann steht da:
,24000000000160100000
ich bin aber der meinung es sollte ,240000000000000000 sein. gibts dafür einer erklärung? bin für jeden tipp dankbar.
lg alram
ich habe in einem komplexeren OO Calc sheet immer wieder rechenfehler gehabt. bis datto hab ich mir irgendwie mit funktionen wie runden etc. geholfen. nun würde es mich aber doch interessieren, woher der fehler kommt. dazu hab ich den sheet genau unter die lupe genommen. dabei bin ich auf einen simplen fehler bei einer subtraktion gestossen. ich gebe bspw. folgende formel in einer zelle ein:
=25000,24-25000
dann steht richtigerweise 0,24 drinn. ABER - wenn ich unter den zellenformatierung auf sagen wir 20 nachkommastellen anzeigen lasse, dann steht da:
,24000000000160100000
ich bin aber der meinung es sollte ,240000000000000000 sein. gibts dafür einer erklärung? bin für jeden tipp dankbar.
lg alram
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo,
Tabellenkalkulationen rechnen nicht im Dezimalsystem sondern im Binärsystem (Theorie siehe http://de.wikipedia.org/wiki/Gleitkommazahl). Die Genauigkeit entspricht dabei ca. 16 Dezimalstellen. Es handelt sich hierbei nicht um Rechenfehler im eigentlichen Sinne sondern um Rundungs- und Umwandlungsfehler, die bei Tabellenkalkulationen unvermeidbar sind. Du solltest nie mehr Nachkommastellen anzeigen lassen, als du wirklich benötigst. Falls du eine höhere Genauigkeit als 16 Dezimalstellen benötigst, dann ist Calc das falsche Werkzeug.
Gruß
Tabellenkalkulationen rechnen nicht im Dezimalsystem sondern im Binärsystem (Theorie siehe http://de.wikipedia.org/wiki/Gleitkommazahl). Die Genauigkeit entspricht dabei ca. 16 Dezimalstellen. Es handelt sich hierbei nicht um Rechenfehler im eigentlichen Sinne sondern um Rundungs- und Umwandlungsfehler, die bei Tabellenkalkulationen unvermeidbar sind. Du solltest nie mehr Nachkommastellen anzeigen lassen, als du wirklich benötigst. Falls du eine höhere Genauigkeit als 16 Dezimalstellen benötigst, dann ist Calc das falsche Werkzeug.
Gruß
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo EPsi,
danke für die info. es ist zwar eine erklärung für das verhalten, nur hilft mir das leider nicht weiter. in meinem beispiel kommen dann so probleme auf, wie bspw. 2 dividiert durch 2 ist nicht 1, sondern 0,xx. weil die erste 2 in wirklichkeit 1,9999999998 ist. die anzeige ist nicht mein problem, es geht um das weiterrechnen. in einzelnen fällen kann ich mich dann mit runden behelfen. wenn ich jedoch funktionen wie SUMMENPRODUKT verwende, kann ich keine darin enthaltenen teilberechnungen getrennt voneinander runden. gibts dafür nicht eine einstellung wo man sagen kann, das alle berechnungen im sheet immer auf 5 stellen gerundet werden sollten? weil mehr nachkommastellen brauch ich eigentlich nicht. 16 stellen sind für mich schon wieder viel zu genau...
danke & lg
danke für die info. es ist zwar eine erklärung für das verhalten, nur hilft mir das leider nicht weiter. in meinem beispiel kommen dann so probleme auf, wie bspw. 2 dividiert durch 2 ist nicht 1, sondern 0,xx. weil die erste 2 in wirklichkeit 1,9999999998 ist. die anzeige ist nicht mein problem, es geht um das weiterrechnen. in einzelnen fällen kann ich mich dann mit runden behelfen. wenn ich jedoch funktionen wie SUMMENPRODUKT verwende, kann ich keine darin enthaltenen teilberechnungen getrennt voneinander runden. gibts dafür nicht eine einstellung wo man sagen kann, das alle berechnungen im sheet immer auf 5 stellen gerundet werden sollten? weil mehr nachkommastellen brauch ich eigentlich nicht. 16 stellen sind für mich schon wieder viel zu genau...
danke & lg
-
- ********
- Beiträge: 4330
- Registriert: Di, 22.06.2004 12:02
- Wohnort: 71134 Aidlingen
- Kontaktdaten:
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo alram,
hast Du schon die Einstellung Genauigkeit wie angezeigt unter Extras/Optionen.../OpenOffice.org Calc/Berechnen getestet ?
hast Du schon die Einstellung Genauigkeit wie angezeigt unter Extras/Optionen.../OpenOffice.org Calc/Berechnen getestet ?
Gruß
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Du wolltest eine Erklärung für das Verhalten und keine Lösungnur hilft mir das leider nicht weiter
Sorry, nur im Konkreten scheint mir das nicht kleinkariert, denn genauso hatte (auch) ich Dich verstanden, denn nirgens ist von Problemen die Rede so das man annehmen mußte Du würdest Dich lediglich für ein unerwartetes Verhalten interessieren, das Dir aufgefallen wahr.
Eine mögliche Lösung ist die Berechnung so durchzuführen das der eigentliche Rechenschritt mit Ganzzahlen erfolgt:
=(2500024-2500000)/100
Gruß
Stephan
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo,
vielleicht hilft Dir das ja weiter.
Stefan hat ja schon erklärt, wie es zu dem Fehler kommt. Und jetzt suchst Du nach einer Lösung für das Problem mit dem dividieren von vermeintlich ganzen Zahlen?
Wird 1,9999999995 durch eine andere Darstellung als 2 angezeigt (wenn man z. B. mit den entsprechenden Symbolen aus der Symbolleiste arbeitet) und dann kommt beim dividieren (oder entsprechend subtrahieren) durch 2 eine "krumme" Zahl raus und nicht 1, dann hättes Du zwei Möglichkeiten:
1. Weg: Du solltest klären, ob die Berechnung der 1,99999999995 korrekt ist und ob dabei immer solche Zahlen enstehen können - ist das der Fall, dann wäre der zweite Weg der falsche!
2. Wenn sicher gestellt ist, dass dabei nur ganze Zahlen herauskommen sollen, so arbeite doch mit der Funktion "RUNDEN" auf Null-Stellen genau. Dann wird aus der 1,9999999995 eine 2 und beim dividieren durch 2 entsteht Deine 1.
Die Genauigkeit des rundens kannst Du ja festlegen. Selbst die Art des rundens kann festgelegt werden (Aufrunden, Abrunden dgl. mehr). Mit etwas Arbeit ließe sich soetwas sogar mit einer Bedingung verknüpfen, sodass erst ab einer bestimmten Genauigkeitsabweichung entsprechend gerundet wird.
Die Frage ist nun, wieso musst Du so genau rechnen, wenn Du weist, dass die Ergebnisse nie über, sagen wir mal 4 Stellen hinausgehen? Dann interessiert die 5 oder wie hier die 16. Stelle nicht...
Hoffe geholfen zu haben.
cu rene
vielleicht hilft Dir das ja weiter.
Stefan hat ja schon erklärt, wie es zu dem Fehler kommt. Und jetzt suchst Du nach einer Lösung für das Problem mit dem dividieren von vermeintlich ganzen Zahlen?
Wird 1,9999999995 durch eine andere Darstellung als 2 angezeigt (wenn man z. B. mit den entsprechenden Symbolen aus der Symbolleiste arbeitet) und dann kommt beim dividieren (oder entsprechend subtrahieren) durch 2 eine "krumme" Zahl raus und nicht 1, dann hättes Du zwei Möglichkeiten:
1. Weg: Du solltest klären, ob die Berechnung der 1,99999999995 korrekt ist und ob dabei immer solche Zahlen enstehen können - ist das der Fall, dann wäre der zweite Weg der falsche!
2. Wenn sicher gestellt ist, dass dabei nur ganze Zahlen herauskommen sollen, so arbeite doch mit der Funktion "RUNDEN" auf Null-Stellen genau. Dann wird aus der 1,9999999995 eine 2 und beim dividieren durch 2 entsteht Deine 1.
Die Genauigkeit des rundens kannst Du ja festlegen. Selbst die Art des rundens kann festgelegt werden (Aufrunden, Abrunden dgl. mehr). Mit etwas Arbeit ließe sich soetwas sogar mit einer Bedingung verknüpfen, sodass erst ab einer bestimmten Genauigkeitsabweichung entsprechend gerundet wird.
Die Frage ist nun, wieso musst Du so genau rechnen, wenn Du weist, dass die Ergebnisse nie über, sagen wir mal 4 Stellen hinausgehen? Dann interessiert die 5 oder wie hier die 16. Stelle nicht...
Hoffe geholfen zu haben.
cu rene
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
hallo,
erstmal danke für alle, dies sich hier zu wort gemeldet haben und mithelfen/-geholfen haben. das ich nur nach einer erklärung gefragt habe, stimmt. aber eigentlich dachte ich durch eine erklärung auch gleichzeitig eine lösung zu haben. die angebotene lösung mit dem runden kenne ich eh, die verwende ich ja auch derzeit. allerdings funktioniert sie nicht immer (so wie ich es will).
@pmoegenb:
hast Du schon die Einstellung Genauigkeit wie angezeigt unter Extras/Optionen.../OpenOffice.org Calc/Berechnen getestet ? => hab ich schon gemacht - ändert nichts am verhalten.
@sanne:
Die Formel:
=2/2=1
ergibt jedenfalls WAHR
=> diese formel so eingegeben ergibt (gott sei dank) natürlich immer wahr. aber bei mir kommt in dieser situation anstatt die zahl 2 natürlich das rechenergebnis einer andere zelle 'herein' welches eben 1,99999998 ist - und genau da liegt mein problem.
konkret tritt das problem bspw. bei einem kleinem übungsbeispiel auf:
a) user gibt in eine zelle einen beliebigen betrag ein
b) darunter soll mit formeln autom. errechnet werden, wieviele euro scheine/münzen herauszugeben sind, um auf diesen betrag zu kommen. natürlich ist die grösstmögliche stückelung gefragt.
wenn man das beispiel mit hilfsspalten umsetzt (siehe anhang, tabelle1) so sieht man wie es sein kann das die division 0,01/0,01 = 0 (Formel in Zelle B19) ergibt. der grund ist klar: sehen tut man den wert auf 2 stellen gerunden, der dahinter errechnete wert ist allerding 0,00999x. in diesem beispiel kann man sich mit der RUNDEN funktion weiterhelfen - klar. fördert zwar nicht die übersichtlichkeit der formeln, löst aber das problem.
wenn ich das beispiel nun aber eleganter lösen möche (ohne die hilfsspalte 'Restbetrag'), so kann ich dies mit der funktion SUMMENPRODUKT. siehe anhang, tabelle 2. da habe ich aus meiner sicht eine elegantere lösung (da weniger nicht benötigte zwischenergebnisse vorhanden sind), dafür kann ich den rechenfehler nicht mehr korrigieren. oder hat hier jemand eine idee?
lg alram
erstmal danke für alle, dies sich hier zu wort gemeldet haben und mithelfen/-geholfen haben. das ich nur nach einer erklärung gefragt habe, stimmt. aber eigentlich dachte ich durch eine erklärung auch gleichzeitig eine lösung zu haben. die angebotene lösung mit dem runden kenne ich eh, die verwende ich ja auch derzeit. allerdings funktioniert sie nicht immer (so wie ich es will).
@pmoegenb:
hast Du schon die Einstellung Genauigkeit wie angezeigt unter Extras/Optionen.../OpenOffice.org Calc/Berechnen getestet ? => hab ich schon gemacht - ändert nichts am verhalten.
@sanne:
Die Formel:
=2/2=1
ergibt jedenfalls WAHR
=> diese formel so eingegeben ergibt (gott sei dank) natürlich immer wahr. aber bei mir kommt in dieser situation anstatt die zahl 2 natürlich das rechenergebnis einer andere zelle 'herein' welches eben 1,99999998 ist - und genau da liegt mein problem.
konkret tritt das problem bspw. bei einem kleinem übungsbeispiel auf:
a) user gibt in eine zelle einen beliebigen betrag ein
b) darunter soll mit formeln autom. errechnet werden, wieviele euro scheine/münzen herauszugeben sind, um auf diesen betrag zu kommen. natürlich ist die grösstmögliche stückelung gefragt.
wenn man das beispiel mit hilfsspalten umsetzt (siehe anhang, tabelle1) so sieht man wie es sein kann das die division 0,01/0,01 = 0 (Formel in Zelle B19) ergibt. der grund ist klar: sehen tut man den wert auf 2 stellen gerunden, der dahinter errechnete wert ist allerding 0,00999x. in diesem beispiel kann man sich mit der RUNDEN funktion weiterhelfen - klar. fördert zwar nicht die übersichtlichkeit der formeln, löst aber das problem.
wenn ich das beispiel nun aber eleganter lösen möche (ohne die hilfsspalte 'Restbetrag'), so kann ich dies mit der funktion SUMMENPRODUKT. siehe anhang, tabelle 2. da habe ich aus meiner sicht eine elegantere lösung (da weniger nicht benötigte zwischenergebnisse vorhanden sind), dafür kann ich den rechenfehler nicht mehr korrigieren. oder hat hier jemand eine idee?
lg alram
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo,
jetzt, da ich Deine Tabelle mal gesehen habe, fällt mir vielleicht noch was ein. Vielleicht kann man das Problem auch dadurch lösen, dass man eine Restdivision durchführt nach dem Prinzip der Umwandlung von Dezimalzahlen in duale Zahlen, nur das hier eben den Wert der Noten entspricht.
Allerdings ist die Lösung mit dem Runden dem Problem entsprechend wirklich hinreichend.
Wenn Du allerdings dabei eine Dezimalstellen herausbekommst, dann weist Du ja, dass Du noch nicht alle Scheine beisammen hast (siehe Prinzip oben). Insofern musst Du schon sicher stellen, dass dieser Teil, so er richtig berechnet wurde, beachtet wird (kleinere Scheine).
Bis dann.
cu rene
jetzt, da ich Deine Tabelle mal gesehen habe, fällt mir vielleicht noch was ein. Vielleicht kann man das Problem auch dadurch lösen, dass man eine Restdivision durchführt nach dem Prinzip der Umwandlung von Dezimalzahlen in duale Zahlen, nur das hier eben den Wert der Noten entspricht.
Allerdings ist die Lösung mit dem Runden dem Problem entsprechend wirklich hinreichend.
Wenn Du allerdings dabei eine Dezimalstellen herausbekommst, dann weist Du ja, dass Du noch nicht alle Scheine beisammen hast (siehe Prinzip oben). Insofern musst Du schon sicher stellen, dass dieser Teil, so er richtig berechnet wurde, beachtet wird (kleinere Scheine).
Bis dann.
cu rene
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo,
addiere zu dem Ausganswert einen Zehntel Cent, dann steht man beim Runden nicht immer so dicht "an der Klippe des Abgrundes".
Nimm "Genauigeit wie Angezeigt" raus,
und Du kannst Dich wieder Deiner Kasse zuwenden, anstatt Open-Office posting.php?mode=smilies&f=2#

Stefan
addiere zu dem Ausganswert einen Zehntel Cent, dann steht man beim Runden nicht immer so dicht "an der Klippe des Abgrundes".
Nimm "Genauigeit wie Angezeigt" raus,
und Du kannst Dich wieder Deiner Kasse zuwenden, anstatt Open-Office posting.php?mode=smilies&f=2#

Stefan
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo
Ja, multipliziere für die Berechnung alle Stückelungen und den eingegebenen Betrag mit 100.
Gruß Karo
Ja, multipliziere für die Berechnung alle Stückelungen und den eingegebenen Betrag mit 100.
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo,
habe nochmal ein wenig an Deiner Tabelle gebastelt und nach dem in der Vormail beschriebenen Prinzip Deine Stückelung nochmals vorgenommen.
Im übrigen - bei Deiner Berechnung fehlt ein Cent.
Vielleicht gefällt Dir die angegebene Variante.
cu rene
habe nochmal ein wenig an Deiner Tabelle gebastelt und nach dem in der Vormail beschriebenen Prinzip Deine Stückelung nochmals vorgenommen.
Im übrigen - bei Deiner Berechnung fehlt ein Cent.
Vielleicht gefällt Dir die angegebene Variante.
cu rene
- Dateianhänge
-
- banko_1.ods
- (8.56 KiB) 90-mal heruntergeladen
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
hallo,
danke nochmal für die raschen antworten.
@rl_doz:
"Im übrigen - bei Deiner Berechnung fehlt ein Cent." => der eine cent fehlt mir je genau wegen dieser rechenungenauigkeit. im übrigen fehlt er auch in deiner variante.
@stbuerk:
das mit dem zehntel dazu, hat leider nicht funktioniert. erst wenn ich 0,5 Cent dazurechne verändert sicht was, dann steht alledings ein cent zuviel im endergebnis.
@Karolus:
beträge mit 100 multiplizieren und dann wieder dividieren funktioniert auch. so kann ich das auch mit der summenprodukt funktion lösen.
also wie gesagt: danke für eure hilfe. mir ist die herkunft des fehlers nun klar. es gibt wohl keine möglichkeit, ausser den fehler direkt in den formeln zu behandeln ...
lg alram
danke nochmal für die raschen antworten.
@rl_doz:
"Im übrigen - bei Deiner Berechnung fehlt ein Cent." => der eine cent fehlt mir je genau wegen dieser rechenungenauigkeit. im übrigen fehlt er auch in deiner variante.
@stbuerk:
das mit dem zehntel dazu, hat leider nicht funktioniert. erst wenn ich 0,5 Cent dazurechne verändert sicht was, dann steht alledings ein cent zuviel im endergebnis.
@Karolus:
beträge mit 100 multiplizieren und dann wieder dividieren funktioniert auch. so kann ich das auch mit der summenprodukt funktion lösen.
also wie gesagt: danke für eure hilfe. mir ist die herkunft des fehlers nun klar. es gibt wohl keine möglichkeit, ausser den fehler direkt in den formeln zu behandeln ...
lg alram
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Nochmal Hallo,
das mit dem zehntel-Cent dazufügen funktioniert wunderbar (siehe Anlage).
Man kann auch einen hundertstel oder zehntausendstel nehmen, solange man nur weit genug von der Rundungegrenze weg ist.
Natürlich keinen halben, dann wird fallsch gerundet,
Stefan
das mit dem zehntel-Cent dazufügen funktioniert wunderbar (siehe Anlage).
Man kann auch einen hundertstel oder zehntausendstel nehmen, solange man nur weit genug von der Rundungegrenze weg ist.
Natürlich keinen halben, dann wird fallsch gerundet,
Stefan
- Dateianhänge
-
[Die Dateierweiterung sxc wurde deaktiviert und kann nicht länger angezeigt werden.]
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
hallo stefan,stbuerk hat geschrieben:Nochmal Hallo,
das mit dem zehntel-Cent dazufügen funktioniert wunderbar (siehe Anlage).
Man kann auch einen hundertstel oder zehntausendstel nehmen, solange man nur weit genug von der Rundungegrenze weg ist.
Natürlich keinen halben, dann wird fallsch gerundet,
Stefan
beider variante mit SUMMENPRODUKT gehts leider net ...
lg alram
Re: Rechenfehler (ungenauigkeit) bei Subtraktion?
Hallo
Hier noch ein Entwurf mit etwas kürzeren Formeln:
Gruß Karo
Hier noch ein Entwurf mit etwas kürzeren Formeln:
Gruß Karo
- Dateianhänge
-
- banko_2.ods
- (10.21 KiB) 75-mal heruntergeladen
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)