LibreOffice Beregningsnøjagtighed

Iboende nøjagtighedsproblem

LibreOffice Calc benytter som det meste anden regnarkssoftware, de flydende komma matematiske kapaciteter, der er tilgængelige på hardwaren. Forudsat at den meste hardware bruger binær flydende komma-aritmetik med begrænset præcision som defineret i standarden IEEE 754 kan mange decimaltal - herunder nogle så simple som 0,1 - ikke repræsenteres præcist i LibreOffice Calc (der bruger 64-bit dobbelt-præcisionstal internt).

Beregning med de tal resulterer nødvendigvis i afrundingsfejl og de forøges med hver beregning.

Dette er ikke en programfejl, men er forventelige og aktuelt uundgåelige uden anvendelse af komplekse beregninger i softwaren, som ville medføre urimelige nedsættelser af hastigheden, og derfor ikke kommer på tale. Brugerne er nødt til at tage højde for det anvende afrunding og sammenligninger med maskin-epsilon (eller enheds-afrunding) efter behov.

Et eksempel med tal:

A

1

31000.99

2

32000.12

3

=A1-A2


Dette vil resultere i -999.129999999997 i A3, i stedet for det forventede -999.13 (det er eventuelt nødvendigt, at du forøger antallet af viste decimalpladser i celleformatet for at se dette).

Et eksempel med datoer og klokkeslæt:

På grund af den specifikke tidsrepræsentation i Calc, gælder dette også alle beregninger vedrørende klokkeslæt. For eksempel viser cellerne A1 og A2 herunder dato- og klokkeslæt-data som indtastet (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 standard-formateringen [HH]:MM:SS anvendes på cellen. Celle A3 vil imidlertid vise 00:09:59.999999 i stedet for det forventede 00:10:00.000000, hvis der er formateret med formatstrengen [HH]:MM:SS.000000. Dette sker på trods af, at der kun blev brugt hele tal for timer og minutter, fordi ethvert klokkeslæt er en brøkdel af en dag, kl. 12.00 (middag) bliver repræsenteret som 0,5.

Data i A1 repræsenteres internt som 43934,5125, og i A2 som 43934,5055555555591126903891563 (som ikke er en eksakt repræsentation af den indtastede dato og klokkeslæt, som skulle være 43934,505555555555555555...).

Subtraktion af dem resulterer i 0,00694444443287037, en værdi, der er en anelse mindre end det forventede 0,00694444444444..., som er 10 minuter.

Støt os venligst!