Dokładność obliczeń LibreOffice

Nieodłączny problem z dokładnością

LibreOffice Calc, podobnie jak większość innych programów do obsługi arkuszy kalkulacyjnych, wykorzystuje funkcje matematyczne zmiennoprzecinkowe dostępne na sprzęcie. Biorąc pod uwagę, że większość współczesnego sprzętu wykorzystuje binarną arytmetykę zmiennoprzecinkową z ograniczoną precyzją zdefiniowaną w standardzie IEEE 754, wiele liczb dziesiętnych — w tym tak proste jak 0,1 — nie można dokładnie przedstawić w programie LibreOffice Calc (który wewnętrznie używa 64-bitowych liczb o podwójnej precyzji).

Obliczenia z użyciem tych liczb nieuchronnie prowadzą do błędów zaokrągleń, które kumulują się przy każdym obliczeniu.

Nie jest to błąd oprogramowania ani nic nieoczekiwanego, czego można by dzisiaj uniknąć bez konieczności stosowania skomplikowanych obliczeń programowych, które stawiałyby niedopuszczalnie nieproporcjonalne wymagania dotyczące wydajności. Użytkownicy muszą to uwzględnić i w razie potrzeby zastosować zaokrąglenia i porównania za pomocą epsilonu maszynowego (lub zaokrąglenia jednostek).

Przykład z liczbami:

A

1

31000.99

2

32000.12

3

=A1-A2


Spowoduje to wyświetlenie -999,129999999997 w komórce A3 zamiast oczekiwanego -999,13 (aby to zobaczyć, może być konieczne zwiększenie liczby wyświetlanych miejsc dziesiętnych w formacie komórki).

Prosimy o wsparcie!