BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> 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?

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Volker_D
Beiträge: 47
Registriert: Sa 3. Jun 2023, 16:46

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Volker_D » So 4. Jun 2023, 12:04

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.

Volker_D
Beiträge: 47
Registriert: Sa 3. Jun 2023, 16:46

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Volker_D » So 4. Jun 2023, 12:29

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.

mikele
Beiträge: 1642
Registriert: Mo 1. Aug 2011, 20:51

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von mikele » So 4. Jun 2023, 14:28

Hallo,
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!
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.
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

musikai
Beiträge: 262
Registriert: Do 14. Mai 2015, 17:53

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von musikai » So 4. Jun 2023, 15:01

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)
Dezimal.PNG
Dezimal.PNG (72.7 KiB) 572 mal betrachtet
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

Volker_D
Beiträge: 47
Registriert: Sa 3. Jun 2023, 16:46

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Volker_D » So 4. Jun 2023, 15:24

hmm... Danke. Die Rechnung kann ich nachvollziehen.
Ich muss das trotzdem nachher noch mal rechnen...

Volker_D
Beiträge: 47
Registriert: Sa 3. Jun 2023, 16:46

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Volker_D » So 4. Jun 2023, 15:26

ah.. ok. Danke alle für die tollen Tipps. Schönes Forum mit kompenten Leuten hier. Danke!

Volker_D
Beiträge: 47
Registriert: Sa 3. Jun 2023, 16:46

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Volker_D » So 4. Jun 2023, 17:26

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)

Volker_D
Beiträge: 47
Registriert: Sa 3. Jun 2023, 16:46

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Volker_D » Mo 5. Jun 2023, 16:09

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.
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.
[...]
hmmm. Jain. An dieser Stelle werden indirekt Fehler gemacht.

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.
gogo hat geschrieben:
So 4. Jun 2023, 00:41
Ich persönlich würde es cool finden, wenn es einen Modus gäbe, bei dem Calc die betroffenen Zellen irgendwie farblich markiert. (Kann man vermutlich makroprogrammieren - ich brauch's aber nicht ;) )
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.

Pit Zyclade
Beiträge: 2674
Registriert: Mo 12. Nov 2012, 16:59

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Pit Zyclade » Mo 5. Jun 2023, 18:55

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.
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?
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.

Volker_D
Beiträge: 47
Registriert: Sa 3. Jun 2023, 16:46

Re: Warum kann LibreOffice nicht 1,001 -1 ausrechnen?

Beitrag von Volker_D » Mo 5. Jun 2023, 19:33

Pit Zyclade hat geschrieben:
Mo 5. Jun 2023, 18:55
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?
Die Aufgabe 100,1 - 100 Ist schon auf der ersten Stelle nach dem Komma falsch. Also bei den "10er Cent".
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 ❤️

Antworten