LibreOffice Calculation Accuracy

Iboende nøyaktighetsproblem

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.

Et eksempel med tall:

A

1

31000.99

2

32000.12

3

=A1-A2


Dette vil resultere i -999.129999999997 i A3, i stedet for forventet -999.13 (det kan hende du må øke viste desimaler i celleformat for å se dette).

Et eksempel med datoer og klokkeslett:

På grunn av den spesifikke tidsrepresentasjonen i Calc, gjelder dette også for alle beregninger som involverer tider. For eksempel viser cellene A1 og A2 nedenfor dato- og klokkeslettdataene som er angitt (i ISO 8601-format):

A

1

2020-04-13 12:18:00

2

2020-04-13 12:08:00

3

=A1-A2


Celle A3 vil vise 00:10:00 hvis standardformateringen [TT]:MM:SS brukes på cellen. Imidlertid vil celle A3 vise 00:09:59.999999 i stedet for forventet 00:10:00.000000 hvis formatert med [HH]:MM:SS.000000 formatstreng. Dette skjer til tross for at bare hele antall timer og minutter ble brukt, fordi internt er enhver tid en brøkdel av en dag, 12:00 (middag) representert som 0,5.

Dataene i A1 er representert internt som 43934.5125, og i A2 som 43934.505555555591126903891563 (som ikke er eksakt representasjon av den angitte dato og klokkeslett, som vil være 43934.50555555555...).

Deres subtraksjon resulterer i 0,006944444443287037, en verdi litt mindre enn forventet 0,00694444444444..., som er 10 minutter.