Introduction à l'arithmétique flottante

Comprendre et limiter les erreurs inhérentes au calcul numérique

De nos jours, de nombreux calculs sont effectués à l’aide d’ordinateurs. Il devient même difficile de trouver des domaines qui y soient étrangers, tant le calcul numérique est omniprésent. On l’utilise ainsi pour les simulations physiques, dans les calculateurs des avions, des voitures, ou des machines industrielles ou encore pour l’informatique financière.

Nombreux sont les gens qui effectuent des calculs sur ordinateur sans attention particulière. Pourtant, même le plus simple des programmes peut avoir un comportement surprenant, comme le montre l’exemple suivant, saisi dans l’interpréteur Python1.

>>> x = 0.1
>>> x + 0.2 == 0.3
False

Cette inégalité un peu inattendue est causée par les arrondis effectués par la machine, qui rendent le comportement difficilement prédictible. Ce comportement n’est d’ailleurs pas propre à Python ; un programme plus complexe, peu importe le langage, regorge de cas similaires !

Les erreurs d’arrondi sont inhérentes au calcul sur ordinateur, et donc inévitables. Ainsi, il est important de connaître leur origine pour les identifier et les maîtriser. Les carences à ce niveau ont parfois des conséquences graves. Par exemple, pendant la première guerre du Golfe, un missile intercepteur Patriot rate sa cible à cause d’une erreur d’arrondi dans le calcul de trajectoire, causant la mort de 28 soldats américains.2

Ce tutoriel est une introduction à l’arithmétique des nombres flottants. Vous y apprendrez comment les nombres à virgule flottante représentent les nombres réels en machine, en quoi ils en sont une approximation, et enfin quelles sont les conséquences en termes de calcul. Au terme de votre lecture, vous serez en mesure d’identifier les situations induisant des erreurs numériques importantes et connaîtrez quelques parades élémentaires. Par ailleurs, vous aurez aussi un bagage minimal pour aborder les méthodes plus complexes.

Notions abordées

Ce tutoriel aborde les notions suivantes :

  • exigences d’une représentation des réels en machine (gamme, précision, performance),
  • notion générale de représentation en virgule flottante (significande, exposant, signe),
  • format IEEE-754 binary64 (gamme, précision, flottants normalisés et dénormalisés, infinis),
  • arrondi des réels vers des flottants (modes d’arrondis, erreurs d’arrondi, erreurs d’arrondi maximales),
  • calcul avec des flottants (arrondis des opérandes, propagation d’arrondis, cas pathologiques, exemple d’algorithme non-naïf).
Prérequis

Pour être compris, ce tutoriel nécessite les prérequis suivants :

  • la notation scientifique des nombres,
  • la numération en base 2,
  • des connaissances de base en programmation, peu importe le langage.

  1. Tous les exemples du cours sont en Python, mais facilement transposables à votre langage préféré.
  2. Rapport officiel du GAO sur l’incident.

Représentation des réels en machine

  1. Exigences pour une représentation des réels en machine
  2. Représentation des réels par les nombres à virgule flottante
  3. Le format de nombres à virgule flottante binary64
  4. Autres formats standards de nombres à virgule flottante

Approximation des réels par les flottants

  1. L'ensemble des flottants
  2. Opérations d'arrondi
  3. Erreurs d'arrondi

Calcul avec les flottants

  1. Opérations élémentaires
  2. Enchaînements d'opérations
  3. Exemples de situations problématiques
  4. Exemple d'algorithme intelligent : la sommation compensée de Kahan


Merci à @Taurre pour la validation et à @Vayel pour la relecture en bêta.

Illustration du tutoriel : artefacts numériques sur le détail d’un diagramme de Voronoi par Craig S. Kaplan, 2005.

Ces contenus pourraient vous intéresser

2 commentaires

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte