BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Das Beispiel mit der Ansicht von 1.5 auf 2 hilft ja nicht als Erklärung. 1.5 wird dort aufgerundet. Bei den 0,000999... wird ja gerade nicht aufgerundet, obwohl ich ein aufrunden erwarten würde.
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Ergänzung: Oder noch mal anders:
Ich Rechne 1.1-1, dann 1,01-1, dann...
c++ mit double und cout liefert mir:
0.1
0.01
0.001
1e-05
1e-06
1e-07
1e-08
1e-09
1e-10
1e-11
Python (mit auto datentyp) und print liefert mir:
0.10000000000000009
0.010000000000000009
0.0009999999999998899
9.999999999998899e-05
1.0000000000065512e-05
9.999999999177334e-07
Kann ich beides verstehn.
LibereOffice aber unterscheidet:
Es zeigt an:
0,1
0,01
0,001
1e-04
1e-05
Versteh ich noch.
LibreOffice zeigt aber folgendes an, wenn man Platz in der Ansicht für alle Stellen gibt (oder wenn man unten in sie Statusleiste guckt) und offensichtlich rechnet/vergleicht es auch mit diesen Werten:
0,1
0,01
0,00099999999999989
9,9999999999989E-05
1,00000000000655E-05
9,99999999917733E-07
9,99999993922529E-09
Warum hier 0,1? Müsste es nicht wie bei Python 0.10000000000000009 sein? Genug Stellen nutzt LibreOffice sonst auch. (Mir ist klar, dass im Binärsystem gespeichert wird und die Stellen im Dezimalsystem ungenau sein könnten!) Das sieht man ja an der 3. Zahl. Die hat auch so viele Stellen. Die 8 bei der 3 Zahl ist an der gleichen Stelle wie die 9 bei Python. LibreOffice hätte also sogar noch eine Stelle mehr und nutzt diese bei den ersten beiden Zahlen nicht. Warum wird dort abgeschnitten, aber sonst nicht? Das ist inkonsistent. Warum dieser Plötzlich Wechsel bei 3 Nachkommastellen?
hmm... Kann man sich bei libreOffice nicht einmal die Zahl im Binärformat "raw" angucken? Das würde helfen.
Ich Rechne 1.1-1, dann 1,01-1, dann...
c++ mit double und cout liefert mir:
0.1
0.01
0.001
1e-05
1e-06
1e-07
1e-08
1e-09
1e-10
1e-11
Python (mit auto datentyp) und print liefert mir:
0.10000000000000009
0.010000000000000009
0.0009999999999998899
9.999999999998899e-05
1.0000000000065512e-05
9.999999999177334e-07
Kann ich beides verstehn.
LibereOffice aber unterscheidet:
Es zeigt an:
0,1
0,01
0,001
1e-04
1e-05
Versteh ich noch.
LibreOffice zeigt aber folgendes an, wenn man Platz in der Ansicht für alle Stellen gibt (oder wenn man unten in sie Statusleiste guckt) und offensichtlich rechnet/vergleicht es auch mit diesen Werten:
0,1
0,01
0,00099999999999989
9,9999999999989E-05
1,00000000000655E-05
9,99999999917733E-07
9,99999993922529E-09
Warum hier 0,1? Müsste es nicht wie bei Python 0.10000000000000009 sein? Genug Stellen nutzt LibreOffice sonst auch. (Mir ist klar, dass im Binärsystem gespeichert wird und die Stellen im Dezimalsystem ungenau sein könnten!) Das sieht man ja an der 3. Zahl. Die hat auch so viele Stellen. Die 8 bei der 3 Zahl ist an der gleichen Stelle wie die 9 bei Python. LibreOffice hätte also sogar noch eine Stelle mehr und nutzt diese bei den ersten beiden Zahlen nicht. Warum wird dort abgeschnitten, aber sonst nicht? Das ist inkonsistent. Warum dieser Plötzlich Wechsel bei 3 Nachkommastellen?
hmm... Kann man sich bei libreOffice nicht einmal die Zahl im Binärformat "raw" angucken? Das würde helfen.
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Hallo,
Wenn ich richtig gerechnet habe, dann lautet die Dualdarstellung von 1,01:
1,00 00001010001111010111 (die ersten zwei Nullen nach dem Komma sind fest, die nachfolgenden Ziffern wiederholen sich periodisch)
Die Darstellung von 1,001 lautet:
1,000 0000001000001100010010011011101001011110001101010011111101111100111011011001000101101000011100101011 (die Periodenlänge ist schon imposant)
Für 64bit Fließkommazahlen stehen 52 Bit zur Verfügung. Danach wird abe rnicht einfach abgeschnitten, sondern gerundet (siehe Umwandlungsbeispiel https://de.wikipedia.org/wiki/IEEE_754):
Dann ist 1,01 (dezimal) intern dargestellt als
1,0000001010001111010111000010100011110101110000101001 (dual)
1,001 (dezimal) wird zu
1,0000000001000001100010010011011101001011110001101010 (dual)
werden diese Dualzahlen wieder in Dezimalzahlen umgewandelt so ergibt sich
1,01000000000000001 (für die urspüngliche 1,01)
1,00099999999999989 (für die urspüngliche 1,001)
mit 15 Ziffern Genauigkeit sind das
1,01
1,001
wie gewünscht.
Subtrahiert man 1 so erhält man:
1,000000000000001 · 10⁻²
bzw.
9,9999999999989 · 10⁻⁴
mit 15 Ziffern genauigkeit also:
0,0100000000000000
bzw.
0,00099999999999989
Es ist also keine Willkür im Spiel, sondern pure numerische Mathematik.
Entscheidend ist (meiner bescheidenen Meinung nach), was intern passiert: intern werden die Dezimalzahlen und Fließkommazahlen als Dualzahlen abgelegt und je nach dem ist nach soundsovielen Bits Schluss. Ob die Zahlen im Dezimalformat 4 oder 15 Ziffern haben spielt dabei erst einmal keine Rolle.Die Aufgabe 1,1-1 und 1,01 -1 wird anders behandelt als die Aufgabe 1,001 - 1. Dem Anwender wird nicht klar warum. An der Genauigkeit kann es ja normalerweise nicht liegen. Die liegt ja bei 15 Stellen!
Wenn ich richtig gerechnet habe, dann lautet die Dualdarstellung von 1,01:
1,00 00001010001111010111 (die ersten zwei Nullen nach dem Komma sind fest, die nachfolgenden Ziffern wiederholen sich periodisch)
Die Darstellung von 1,001 lautet:
1,000 0000001000001100010010011011101001011110001101010011111101111100111011011001000101101000011100101011 (die Periodenlänge ist schon imposant)
Für 64bit Fließkommazahlen stehen 52 Bit zur Verfügung. Danach wird abe rnicht einfach abgeschnitten, sondern gerundet (siehe Umwandlungsbeispiel https://de.wikipedia.org/wiki/IEEE_754):
Dann ist 1,01 (dezimal) intern dargestellt als
1,0000001010001111010111000010100011110101110000101001 (dual)
1,001 (dezimal) wird zu
1,0000000001000001100010010011011101001011110001101010 (dual)
werden diese Dualzahlen wieder in Dezimalzahlen umgewandelt so ergibt sich
1,01000000000000001 (für die urspüngliche 1,01)
1,00099999999999989 (für die urspüngliche 1,001)
mit 15 Ziffern Genauigkeit sind das
1,01
1,001
wie gewünscht.
Subtrahiert man 1 so erhält man:
1,000000000000001 · 10⁻²
bzw.
9,9999999999989 · 10⁻⁴
mit 15 Ziffern genauigkeit also:
0,0100000000000000
bzw.
0,00099999999999989
Es ist also keine Willkür im Spiel, sondern pure numerische Mathematik.
Gruß,
mikele
mikele
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Fürs praktische Arbeiten hier meine Erkenntnisse:
Unter Extras->Optionen->LOCalc->Berechnen folgende 2 Optionen aktivieren:
1.Dezimalstellen für Standardzahlenformat begrenzen z.B. 15
Das zeigt Ergebnisse von Berechnungen schöner gerundet an.
2. Genauigkeit wie angezeigt
Das nimmt dieses angezeigte Ergebnis für weitere Formeln z.B. Vergleiche.
So kann man ein Ergebnis in einer Zelle direkt in einer Formel vergleichen z.B:
=WENN(C1=0,00000000000001)
Berechnungen in einer Formel müssen aber weiterhin von Hand gerundet werden z.B:
=WENN((RUNDEN(A1-B1;15))=0,00000000000001)
Unter Extras->Optionen->LOCalc->Berechnen folgende 2 Optionen aktivieren:
1.Dezimalstellen für Standardzahlenformat begrenzen z.B. 15
Das zeigt Ergebnisse von Berechnungen schöner gerundet an.
2. Genauigkeit wie angezeigt
Das nimmt dieses angezeigte Ergebnis für weitere Formeln z.B. Vergleiche.
So kann man ein Ergebnis in einer Zelle direkt in einer Formel vergleichen z.B:
=WENN(C1=0,00000000000001)
Berechnungen in einer Formel müssen aber weiterhin von Hand gerundet werden z.B:
=WENN((RUNDEN(A1-B1;15))=0,00000000000001)
- Dateianhänge
-
- calc.ods
- (9.69 KiB) 30-mal heruntergeladen
Win7 Pro, Sibelius 7.1.3, Lubuntu 15.10, LibO 4.4.7, OO 4.1.3
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html
Free Project: LibreOffice Songbook Architect (LOSA)
http://struckkai.blogspot.de/2015/04/li ... itect.html
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
hmm... Danke. Die Rechnung kann ich nachvollziehen.
Ich muss das trotzdem nachher noch mal rechnen...
Ich muss das trotzdem nachher noch mal rechnen...
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
ah.. ok. Danke alle für die tollen Tipps. Schönes Forum mit kompenten Leuten hier. Danke!
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Vielleicht kann mich einer in meinem Gedankengang berichtigen oder aufklären:
Wir haben also die Binärzahl 1,0000001010001111010111000010100011110101110000101001
Das ist die Dezimal 1,10 auf 15 Stellen genau.
Und wir haben die Binärzahl 1.
Das ist Dezimal 1 auf unendlich vielen Stellen genau.
Wir subtrahieren die beiden Zahlen und sehen, dass wir eine Zahl erhalten, die im Deziamlsystem nur noch auf 3 Stellen genau ist. (Verkürzt: 15 Stellen Genauigkeit - unendliche Genauigkeit kann nur noch 3 Stellen Genauigkeit ergeben)
Wie kann ich am "Besten"/schnellsten durch eine weite Rechenoperation die Anzahl der korrekten Dezimalstellen noch weiter reduzieren?
Gerne auch mit anderen Zahlen (aber möglich wenig Rechenoperationen).
Sprich: Kann ich 2 Zahlen, die im Dezimalsystem 15 (oder mehr) Stellen Genauigkeit haben durch 3 Rechenoperationen so verknüft werden, sodass das Ergebnis weniger als 3 Stellen Genauigkeit im Dezimalsystem hat? Ab "Besten" sogar schon die erste Stelle falsch ist. (Aber ohne Überlauf. Also nicht *100000000000000000 oder :100000000000000, dann läuft es natürlich über)
Oder gibt es evtl sogar eine Minusaufgabe, bei der ich schon weniger als 3 Stellen Genauigkeit bekommen (Aber hier auch ohne Unterschreitung des Wertebereiches)
Wir haben also die Binärzahl 1,0000001010001111010111000010100011110101110000101001
Das ist die Dezimal 1,10 auf 15 Stellen genau.
Und wir haben die Binärzahl 1.
Das ist Dezimal 1 auf unendlich vielen Stellen genau.
Wir subtrahieren die beiden Zahlen und sehen, dass wir eine Zahl erhalten, die im Deziamlsystem nur noch auf 3 Stellen genau ist. (Verkürzt: 15 Stellen Genauigkeit - unendliche Genauigkeit kann nur noch 3 Stellen Genauigkeit ergeben)
Wie kann ich am "Besten"/schnellsten durch eine weite Rechenoperation die Anzahl der korrekten Dezimalstellen noch weiter reduzieren?
Gerne auch mit anderen Zahlen (aber möglich wenig Rechenoperationen).
Sprich: Kann ich 2 Zahlen, die im Dezimalsystem 15 (oder mehr) Stellen Genauigkeit haben durch 3 Rechenoperationen so verknüft werden, sodass das Ergebnis weniger als 3 Stellen Genauigkeit im Dezimalsystem hat? Ab "Besten" sogar schon die erste Stelle falsch ist. (Aber ohne Überlauf. Also nicht *100000000000000000 oder :100000000000000, dann läuft es natürlich über)
Oder gibt es evtl sogar eine Minusaufgabe, bei der ich schon weniger als 3 Stellen Genauigkeit bekommen (Aber hier auch ohne Unterschreitung des Wertebereiches)
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Ich habe es heute mit Excel ausprobiert. Das zeigt, wie Google Tabelle, bis zu 30 Dezimalstellen an, wobei die letzten 10 Stellen nur mit Nullen aufgefüllt sind. Ich weiß gar nicht was das bringen soll sich 10 weitere Nullen anzeigen zu lassen.
Wenn ich die Zahl 1,0000001010001111010111000010100011110101110000101001 in eine Dezimalzahl umwandle, dann ergibt sich nicht 1,01000000000000001
Die Dezimalzahl ist viel länger. Diese Zahl ergibt sich nur dann, wenn man rundet.
Und diese Zahl ist nicht auf 15 Ziffern gerundet, sondern auf (wesentlich) mehr Stellen!
15 Stellen wäre viel kürzer.
Analog für die andere Zahl.
Hätte LibreOffice auf die Genauigkeit von 15 Stellen gerundet, dann würde der Fehler bei 1,001-1 ja nicht auftreten, weil man innerhalb der Genauigkeit wäre. LibreOffice Cal, Excel und Google Tabellen sind aber, vermutlich bewußt, außerhalb der Genauigkeit von 15 Stellen.
Man kann es leider drehen und wenden wie man will. Rundet man unterhalb der Genauigkeit von 15 Stellen, dann würde ich zwar die Aufgabe 1,001-1 "korrekt" lösen, aber dafür werden Rechnungen mit kleinen Zahlen (z.B. bei Grenzwertbetrachtungen, Iterationsferfahren, Reihenbildungen, ... schneller falsch). Runde ich oberhalb der Genauigkeit, dann ist zwar die Aufgabe 1,001-1 falsch, aber dafür bekomme ich bei diesen anderen Aufgaben sinnvollere Lösungen.
hmmm...
Ich dachte erst, dass man immer bei einem Vergleich mit Wenn und dem Gleichheitsoperator warnen sollte, aber das hilft nicht, weil man bei ähnlichen Zahlen mal auf zu größe, mal auf zu kleine und mal auf genaue Ergebnisse kommen kann.
Ich habe mal den Rechentrainer heute ein paar Leuten mit abgeschlossenen Hochschulstudium (Mathe, Informatik, ...) gezeigt. Die haben auch nur ratlos gegeguckt und nicht verstanden, warum bei der Aufgabe 1,001-1 die Antwort 0,001 mit falsch bewertet wurde. Wenn das studierten Leuten in den Fächern schon passiert und das bei einer Aufgabe, bei der der Fehler offensichtlich sichtbar ist, dann möchte ich nicht wissen, bei wie vielen anderen Calc Nutzern, die nicht Mathe oder Informatik studiert haben, Rechnungen durchführen und ihre Aufgaben nicht im Kopf nachrechnen und daher nicht erkennen können, dass überhaupt ein Problem/Fehler vorliegt.
So eine farbliche Markierung würde ich unterstützen.
hmmm. Jain. An dieser Stelle werden indirekt Fehler gemacht.mikele hat geschrieben: ↑So 4. Jun 2023, 14:28[...]
Dann ist 1,01 (dezimal) intern dargestellt als
1,0000001010001111010111000010100011110101110000101001 (dual)
1,001 (dezimal) wird zu
1,0000000001000001100010010011011101001011110001101010 (dual)
werden diese Dualzahlen wieder in Dezimalzahlen umgewandelt so ergibt sich
1,01000000000000001 (für die urspüngliche 1,01)
1,00099999999999989 (für die urspüngliche 1,001)
mit 15 Ziffern Genauigkeit sind das
1,01
1,001
wie gewünscht.
[...]
Wenn ich die Zahl 1,0000001010001111010111000010100011110101110000101001 in eine Dezimalzahl umwandle, dann ergibt sich nicht 1,01000000000000001
Die Dezimalzahl ist viel länger. Diese Zahl ergibt sich nur dann, wenn man rundet.
Und diese Zahl ist nicht auf 15 Ziffern gerundet, sondern auf (wesentlich) mehr Stellen!
15 Stellen wäre viel kürzer.
Analog für die andere Zahl.
Hätte LibreOffice auf die Genauigkeit von 15 Stellen gerundet, dann würde der Fehler bei 1,001-1 ja nicht auftreten, weil man innerhalb der Genauigkeit wäre. LibreOffice Cal, Excel und Google Tabellen sind aber, vermutlich bewußt, außerhalb der Genauigkeit von 15 Stellen.
Man kann es leider drehen und wenden wie man will. Rundet man unterhalb der Genauigkeit von 15 Stellen, dann würde ich zwar die Aufgabe 1,001-1 "korrekt" lösen, aber dafür werden Rechnungen mit kleinen Zahlen (z.B. bei Grenzwertbetrachtungen, Iterationsferfahren, Reihenbildungen, ... schneller falsch). Runde ich oberhalb der Genauigkeit, dann ist zwar die Aufgabe 1,001-1 falsch, aber dafür bekomme ich bei diesen anderen Aufgaben sinnvollere Lösungen.
hmmm...
Ich dachte erst, dass man immer bei einem Vergleich mit Wenn und dem Gleichheitsoperator warnen sollte, aber das hilft nicht, weil man bei ähnlichen Zahlen mal auf zu größe, mal auf zu kleine und mal auf genaue Ergebnisse kommen kann.
Ja. Erst fand ich die Idee doof, aber ich glaube genau dies sollte standardmäßig so sein. Immer dann, wenn eine Zahl nicht mehr komplett in die Mantisse passt, egal aus wechem Grund, dann sollte davor gewarnt werden und der Benutzer sollte Tipps bekommen, bekommen, was er warum und wie machen/einstellen kann.
Ich habe mal den Rechentrainer heute ein paar Leuten mit abgeschlossenen Hochschulstudium (Mathe, Informatik, ...) gezeigt. Die haben auch nur ratlos gegeguckt und nicht verstanden, warum bei der Aufgabe 1,001-1 die Antwort 0,001 mit falsch bewertet wurde. Wenn das studierten Leuten in den Fächern schon passiert und das bei einer Aufgabe, bei der der Fehler offensichtlich sichtbar ist, dann möchte ich nicht wissen, bei wie vielen anderen Calc Nutzern, die nicht Mathe oder Informatik studiert haben, Rechnungen durchführen und ihre Aufgaben nicht im Kopf nachrechnen und daher nicht erkennen können, dass überhaupt ein Problem/Fehler vorliegt.
So eine farbliche Markierung würde ich unterstützen.
-
- Beiträge: 2674
- Registriert: Mo 12. Nov 2012, 16:59
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Der normale Bürger rechnet doch nur, wenn es ums Geld geht und da reicht es, wenn die dritte Stelle kaufmännisch korrekt gerundet wird, obwohl auch das schon sinnlos ist, denn wer von euch hat im letzten Jahr mit einzelnen 0,01 € irgendetwas kaufen können?Volker_D hat geschrieben: ↑Mo 5. Jun 2023, 16:09... dann möchte ich nicht wissen, bei wie vielen anderen Calc Nutzern, die nicht Mathe oder Informatik studiert haben, Rechnungen durchführen und ihre Aufgaben nicht im Kopf nachrechnen und daher nicht erkennen können, dass überhaupt ein Problem/Fehler vorliegt.
Die Finnen haben das bei der €-Einführung gleich erkannt und deren Kleingeld wird doch nur in Deutschland als Sammler-Rarität verhökert.
Dies sollte nur ein Beitrag zur Entspannung sein, keine Klage oder Verunsicherung. Wer Mathe oder Informatik studiert, wird nur selten an der Uni bleiben und sich folglich auch kaum mit dem angesprochenen Problem beschäftigen. (Nicht vergessen, dies ist ein User-Forum, wie das auf Neudeutsch heißt)
LO 7.5.8.2 (X86_64) / AOO 4.1.14 / Windows 11 64bit
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Problem gelöst? Dann bitte im Betreff der ersten Nachricht [gelöst] voranstellen.
Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?
Die Aufgabe 100,1 - 100 Ist schon auf der ersten Stelle nach dem Komma falsch. Also bei den "10er Cent".Pit Zyclade hat geschrieben: ↑Mo 5. Jun 2023, 18:55Der normale Bürger rechnet doch nur, wenn es ums Geld geht und da reicht es, wenn die dritte Stelle kaufmännisch korrekt gerundet wird, obwohl auch das schon sinnlos ist, denn wer von euch hat im letzten Jahr mit einzelnen 0,01 € irgendetwas kaufen können?
Und an der Tankstelle rechnet der Betreiber mit 3 Stellen nach dem Komma.
...
Aber stimmt schon, ich sollte das evtl doch eher als Bugreport oder Feature Request stellen.
An alle, die das LibreOffice-Forum nutzen:
Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.
❤️ Vielen lieben Dank für Ihre Unterstützung ❤️