Articles

Nombres à virgule flottante

Pourquoi les nombres à virgule flottante sont nécessaires

Comme la mémoire de l’ordinateur est limitée, vous ne pouvez pas stocker les nombres avec une précision infinie, que vous utilisiez des fractions binaires ou décimales: à un moment donné, vous devez couper. Mais combien de précision est nécessaire? Et où est-il nécessaire? Combien de chiffres entiers et combien de chiffres de fraction?

  • Pour un ingénieur qui construit une autoroute, peu importe que ce soit 10 mètres ou 10.0001 mètres de large – leurs mesures ne sont probablement pas si précises en premier lieu.
  • Pour quelqu’un qui conçoit une puce électronique, 0,0001 mètre (un dixième de millimètre) est une énorme différence – Mais il n’aura jamais à faire face à une distance supérieure à 0,1 mètre.
  • Un physicien doit utiliser la vitesse de la lumière (environ 300000000) et la constante gravitationnelle de Newton (environ 0,0000000000667) ensemble dans le même calcul.

Pour satisfaire l’ingénieur et le concepteur de puces, un format numérique doit fournir une précision pour des nombres à des grandeurs très différentes. Cependant, seule une précision relative est nécessaire. Pour satisfaire le physicien, il doit être possible de faire des calculs impliquant des nombres de différentes grandeurs.

Fondamentalement, avoir un nombre fixe de chiffres entiers et fractionnaires n’est pas utile – et la solution est un format à virgule flottante.

Comment fonctionnent les nombres à virgule flottante

L’idée est de composer un certain nombre de deux parties principales:

  • Un significand qui contient les chiffres du nombre. Les significations négatives représentent des nombres négatifs.
  • Exposant qui indique où le point décimal (ou binaire) est placé par rapport au début de la signification. Les exposants négatifs représentent des nombres très petits (c’est-à-dire proches de zéro).

Un tel format satisfait à toutes les exigences :

  • Il peut représenter des nombres à des grandeurs très différentes (limitées par la longueur de l’exposant)
  • Il fournit la même précision relative à toutes les grandeurs (limitées par la longueur du significand)
  • Il permet des calculs sur toutes les grandeurs: multiplier un très grand et un très petit nombre préserve la précision des deux dans le résultat.

Les nombres décimaux à virgule flottante prennent généralement la forme d’une notation scientifique avec un point explicite toujours compris entre les 1er et 2e chiffres. L’exposant est soit écrit explicitement en incluant la base, soit un e est utilisé pour le séparer du significand.

La norme

Presque tous les langages matériels et de programmation utilisent des nombres à virgule flottante dans les mêmes formats binaires, qui sont définis dans la norme IEEE 754. Les formats habituels sont de 32 ou 64 bits de longueur totale:

Format Total bits Significand bits Exponent bits Smallest number Largest number
Single precision 32 23 + 1 sign 8 ca. 1.2 ⋅ 10-38 ca. 3.4 ⋅ 1038
Double precision 64 52 + 1 sign 11 ca. 2.2 ⋅ 10-308 ca. 1.8 ⋅ 10308

Notez qu’il y a quelques particularités:

  • La séquence de bits réelle est le bit de signe en premier, suivi de l’exposant et enfin des bits de signification.
  • L’exposant n’a pas de signe ; à la place, un biais d’exposant lui est soustrait (127 pour simple et 1023 pour double précision). Ceci, et la séquence de bits, permet de comparer et de trier correctement les nombres à virgule flottante, même lorsqu’ils sont interprétés comme des entiers.
  • Le chiffre le plus significatif du significand est omis et supposé être 1, à l’exception des nombres sous-normaux qui sont marqués par un exposant all-0 et permettent une plage de nombres au-delà des plus petits nombres donnés dans le tableau ci-dessus, au prix de la précision.
  • Il existe des valeurs nulles positives et négatives distinctes, différentes dans le bit de signe, où tous les autres bits sont 0. Ceux-ci doivent être considérés comme égaux même si leurs modèles de bits sont différents.
  • Il existe des valeurs infinies positives et négatives spéciales, où l’exposant est tous des 1 bits et le significand est tous des 0 bits. Ce sont les résultats des calculs où la plage positive de l’exposant est dépassée, ou la division d’un nombre régulier par zéro.
  • Il y a des valeurs spéciales pas un nombre (ou NaN) où l’exposant est tous 1 bits et le significand n’est pas tous 0 bits. Ceux-ci représentent le résultat de divers calculs non définis (comme la multiplication de 0 et de l’infini, tout calcul impliquant une valeur NaN ou des cas spécifiques à une application). Même les valeurs NaN identiques aux bits ne doivent pas être considérées comme égales.

Si cela semble trop abstrait et que vous voulez voir à quoi ressemblent certaines valeurs spécifiques dans IEE 754, essayez le jouet Float, ou la visualisation IEEE 754, ou Float Exposed.