Precisión dos cálculos no LibreOffice

O problema inherente á precisión

O Calco do LibreOffice, o mesmo que a maioría do software de follas de cálculo, emprega recursos de matemáticas de vírgula flutuante dispoñíbeis no hardware. Dado que a maioría do hardware contemporáneo emprega aritmética binaria de vírgula flutuante con precisión limitada tal e como se define no estándar IEEE 754, non é posíbel representar moitos números decimais, incluídos algúns tan simples como 0,1, no Calc do LibreOffice (que emprega números de dupla precisión de 64 bits internamente).

Os cálculos con eses números necesariamente resultan en erros de arredondamento, e eses erros acumúlanse con cada cálculo subsecuente.

Isto non é un erro de programación, senón que é algo esperado e actualmente inevitábel sen realizar cálculos complexos con software, co que incorrería en penalizacións de desempeño inadecuadas, polo que non se considera. Os usuarios deben saber isto e empregar os arredondamentos e as comparacións con épsilon da máquina (ou arrendamento ás unidades), segundo se precisar.

Un exemplo con números:

A

1

31000.99

2

32000.12

3

=A1-A2


Isto resulta en -999,129999999997 en A3, no canto do -999,13 agardado (pode que haxa que aumentar o número de cifras decimais que se mostran no formato de cela para velo).

Un exemplo con datas e horas:

Debido á representación específica do tempo no Calc, isto tamén se aplica a todos os cálculos que inclúan horas. Por exemplo, as celas A1 e A2 de abaixo mostran os datos e data e hora introducidos (no formato ISO 8601):

A

1

2020-04-13 12:18:00

2

2020-04-13 12:08:00

3

=A1-A2


A cela A3 mostra 00:10:00 se se lle aplica o formato por omisión [HH]:MM:SS. Porén, a cela A3 mostra 00:09:59.999999 no canto do 00:10:00.000000 agardado se se formata coa cadea de formato [HH]:MM:SS.000000. Isto prodúcese a pesar de que só se empregaron números enteiros de horas e minutos porque, internamente, todo tempo é unha fracción dun día, estando 12:00 (mediodía) representado como 0,5).

A data en A1 represéntase internamente como 43934,5125, e en A2 como 43934,5055555555591126903891563 (o que non é unha representación exacta da data e hora introducidas, que sería 43934,505555555555555555...).

A resta resulta en 0.00694444443287037, un valor lixeiramente menor do 0.00694444444444... agardado, que corresponde a 10 minutos.

Precisamos da súa axuda!