Contenu

# Précision de calcul LibreOffice

## Problème de précision inhérent

LibreOffice Calc, comme la plupart des autres tableurs, utilise les fonctions mathématiques en virgule flottante disponibles sur le matériel. Étant donné que la plupart des matériels actuels utilisent l'arithmétique binaire à virgule flottante avec une précision limitée définie dans la norme IEEE 754, de nombreux nombres décimaux - y compris aussi simples que 0,1 - ne peuvent pas être représentés avec précision dans LibreOffice Calc (qui utilise en interne des nombres double précision 64 bits).

Les calculs avec ces nombres entraînent nécessairement des erreurs d'arrondi, et celles-ci s'accumulent à chaque calcul.

Ce n'est pas un bogue, mais il est attendu et actuellement inévitable sans utiliser des calculs complexes dans le logiciel, ce qui entraînerait des pénalités de performances inappropriées, et est donc hors de question. Les utilisateurs doivent en tenir compte et utiliser l'arrondi et les comparaisons avec la machine epsilon (ou arrondi unitaire) si nécessaire.

Un exemple avec des nombres :

| A
1 | 31000.99
2 | 32000.12
3 | =A1-A2

Cela se traduira par -999,129999999997 en A3, au lieu de -999,13 attendu (vous devrez peut-être augmenter les décimales affichées dans le format de cellule pour voir cela).

Un exemple avec les dates et heures :

En raison de la spécificité de la représentation du temps dans Calc, cela s'applique également à tous les calculs impliquant des heures. Par exemple, les cellules A1 et A2 ci-dessous affichent les données de date et d'heure telles qu'elles ont été saisies (au format ISO 8601) :

| A
1 | 2020-04-13 12:18:00
2 | 2020-04-13 12:08:00
3 | =A1-A2

La cellule A3 affichera 00:10:00 si le formatage par défaut [HH]:MM:SS est appliqué à la cellule. Cependant, la cellule A3 affichera 00:09:59.999999 au lieu du 00:10:00.000000 attendu si elle est formatée à l'aide de la chaîne de format [HH]:MM:SS.000000. Cela se produit bien que seuls des nombres entiers d'heures et de minutes aient été utilisés, car en interne, toute heure est une fraction de jour, 12h00 (midi) étant représenté par 0,5.

Les données dans A1 sont représentées en interne par 43934.5125 et dans A2 par 43934.505555555591126903891563 (ce qui n'est pas une représentation exacte de la date/heure saisie, qui serait 43934.505555555555555555...).

Leur soustraction donne 0,00694444443287037, une valeur légèrement inférieure à celle attendue 0,00694444444444..., soit 10 minutes.

Rubriques connexes

FRACTION.ANNEE, fonction