LibreOffice-Berechnungsgenauigkeit

Inhärentes Genauigkeitsproblem

LibreOffice Calc, just like most other spreadsheet software, uses floating-point math capabilities available on hardware. Given that most contemporary hardware uses binary floating-point arithmetic with limited precision defined in IEEE 754 standard, many decimal numbers - including as simple as 0.1 - cannot be precisely represented in LibreOffice Calc (which uses 64-bit double-precision numbers internally).

Calculations with those numbers necessarily results in rounding errors, and those accumulate with every calculation.

This is not a bug, but is expected and currently unavoidable without using complex calculations in software, which would incur inappropriate performance penalties, and thus is out of question. Users need to account for that, and use rounding and comparisons with machine epsilon (or unit roundoff) as necessary.

Ein Beispiel mit Zahlen:

A

1

31000.99

2

32000.12

3

=A1-A2


Dies führt zu -999,129999999997 in A3 anstelle des erwarteten -999,13 (Sie müssen möglicherweise die angezeigten Dezimalstellen im Zellformat erhöhen, um dies zu sehen).

Ein Beispiel mit Datum und Uhrzeit:

Aufgrund der Besonderheiten der Zeitdarstellung in Calc gilt dies auch für alle Berechnungen mit Zeiten. Beispielsweise zeigen die Zellen A1 und A2 unten die Datums- und Uhrzeitdaten wie eingegeben (im ISO 8601-Format):

A

1

2020-04-13 12:18:00

2

2020-04-13 12:08:00

3

=A1-A2


In Zelle A3 wird 00:10:00 angezeigt, wenn die Standardformatierung [HH]:MM:SS auf die Zelle angewendet wird. Zelle A3 zeigt jedoch 00:09:59.999999 anstelle des erwarteten 00:10:00.000000 an, wenn sie mit der Formatzeichenfolge [HH]:MM:SS.000000 formatiert ist. Dies geschieht, obwohl nur ganze Stunden und Minuten verwendet wurden, da intern jede Zeit ein Bruchteil eines Tages ist, wobei 12:00 (Mittag) als 0,5 dargestellt wird.

Die Daten in A1 werden intern als 43934,5125 und in A2 als 43934,5055555555591126903891563 dargestellt (was keine exakte Darstellung der eingegebenen Datumszeit ist, die 43934,5055555555555555555 wäre…).

Ihre Subtraktion ergibt 0,00694444443287037, einen etwas geringeren Wert als erwartet 0,0069444444444…, was 10 Minuten entspricht.