Chapter 4.1 : Introduction

La précision, et sa banalisation («commoditization») notamment en raison de l'effondrement de son coût, et particulièrement de sa reproductibilité, est à l'origine de nos sociétés industrielles depuis le milieu du XVIII\ieme siècle. L'évolution de la précision numérique est allée encore plus vite et encore plus loin que la précision mécanique.

Après un développement assez anarchique des formats et des algorithmes de calcul en virgule flottante à l'origine du secteur informatique, une norme a émergé en 1985 qui a standardisé les formats : IEEE 754 [191]On a Proposed Floating-point Standard, 1979, Kahan, William and Palmer, John F.[197]IEEE Standard for Binary Floating-Point Arithmetic, 1985[200]IEEE Standard for Radix-Independent Floating-Point Arithmetic, 1987 (voir figure 57) et ses évolutions [198]IEEE Standard for Floating-Point Arithmetic, 2008[199]IEEE Standard for Floating-Point Arithmetic, 2019.

La précision est souvent un impensé du développeur : on dit à l'ordinateur/calculatrice quoi faire, il va forcément le faire au mieux. Reste à mesurer ce « au mieux » et, plus difficile, savoir quelle est la précision. Faute de quoi, deux enthousiasmes candides et radicaux s'affrontent :
  • « de toute façon, ça calcule assez vite pour ce dont j'ai besoin, donc j'utilise la précision maximale » et tout est codé en double
  • « de toute façon, je n'aurai jamais besoin de plus de trois chiffres, donc j'utilise la précision minimale » et tout est codé en float simple precision


Outre un standard de format, cette norme fournit des garanties de précision pour les diverses opérations et fonctions, ainsi qu'une interface avec la FPU (Floating Point Unit) sous forme de contrôle du mode d'arrondi, de flag de statut, de représentation des nombres exceptionnels ou dénormaux et d'exceptions masquables en cas de débordement, de division par zéro, d'indétermination voire de calcul inexact. Les puristes reprochent l'impact de cette approche sur les performances (exception et dénormaux) et sur l'efficacité de la représentation.

Ses défauts ne doivent pas nous faire oublier ses nombreuses avancées et la situation antérieure. Le parti pris de cette norme a été de donner une forme de contrôle à l'utilisateur sur cette boite noire qu'est le calcul numérique, et des moyens pour surveiller la précision tout en gardant la performance. Avant même cette standardisation, il faut porter au crédit du langage C d'avoir permis une amélioration de la garantie des résultats numériques en procédant à tous les calculs intermédiaires en double précision, dans sa version Kernighan and Ritchie, avant sa normalisation ANSI C toutefois.

Les apports de cette norme sont toutefois restés cantonnés à une petite communauté : bien que la large implantation d'Intel, promoteur de cette norme, ait amené ces fonctionnalités sur tous les bureaux depuis le coprocesseur 8087, rares ont été les systèmes et les langages à proposer la double précision étendue (64 bits de mantisse) ou les flottants en base dix (pourtant cruciaux pour les calculs comptables), sans parler de propager l'interface du FPU dans les bibliothèques de ces langages...

Mais avant même de faire des erreurs dans les calculs, le simple recours à la base dix sur du matériel qui travaille en base deux introduit une erreur.