LibreOffice utrekningspresisjon

Ibuande presisjonsproblem

LibreOffice Calc brukar, som dei fleste reknearka, flyttalsmatematikken som er tilgjengeleg i datamaskinen. Går ein ut frå at dei fleste moderne datamaskinene brukar binær flyttallsaritmetikk med avgrensa presisjon definert i standarden IEEE 754 kan mange desimaltal – for eksempel noko så enkelt som 0,1 – kan ikkje representerast nøyaktig i LibreOffice Calc (som brukar 64-bit dobbelt-presisionstal internt).

Utrekningar med desse tala resulterer nødvendigvis i avrundingsfeil som aukar for kvar utrekning.

Dette er ikkje ein feil i programmet, men er venta og er uunngåeleg utan å bruka komplekse utrekningar som vil føra til urimeleg seinking av farten på utrekningane og kjem såleis ikkje på tale. Bruikarane må ta omsyn til dette og bruka avrundingar og samanlikningar med machine epsilon (or unit roundoff) etter behov.

Eit eksempel med tal:

A

1

31000.99

2

32000.12

3

=A1-A2


Dette vil resultera i -999,129999999997 i A3 i staden for -999,13 som du kanskje venta. (Det kan henda du må auka talet på viste desimalplassar for å sjå dette).

Eit eksempel med datoar og klokkeslett:

På grunn av den spesifikke tidsrepresentasjonen i Calc, gjeld dette også for alle utrekningar som involverer tid. Cellene A1 og A2 nedanfor viser for eksempel dato- og klokkeslettdataa slik dei er gjevne (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 visa 00:10:00, viss standard-formateringa [HH]:MM:SS er brukt på cella. Celle A3 vil visa 00:09:59,999999 i staden for 00:10:00.000000 viss cella er formatert med formatstrengen [HH]:MM:SS.000000. Dette skjer sjølv om berre heile tal vert brukte for timar og minutt fordi alle klokkeslett er ein brøkdel av ein dag. Såleis vert kl. 12 middag representert som 0,5.

Data i A1 vert internt representert som 43934,5125, og i A2 som 43934,5055555555591126903891563 (som ikkje er ein nøyaktig representasjon av den innskrivne datoen og klokkeslettet, som skulle vera 43934,505555555555555555…).

Subtraksjonen av desse resulterer i 0,00694444443287037, ein verdi som er ørlite grann mindre enn den venta 0,00694444444444..., som er 10 minutt.

Støtt oss!