logo

Nombres à virgule flottante selon la norme IEEE 754

La norme IEEE pour l'arithmétique à virgule flottante (IEEE 754) est une norme technique pour le calcul à virgule flottante établie en 1985 par le Institut d'ingénieurs électriciens et électroniciens (IEEE) . La norme résout de nombreux problèmes rencontrés dans les diverses implémentations de virgule flottante qui rendaient leur utilisation difficile et réduisaient leur portabilité. La virgule flottante de la norme IEEE 754 est aujourd'hui la représentation la plus courante des nombres réels sur les ordinateurs, y compris les PC à processeur Intel, les Mac et la plupart des plates-formes Unix.

Il existe plusieurs façons de représenter un nombre à virgule flottante, mais IEEE 754 est la plus efficace dans la plupart des cas. IEEE 754 comporte 3 composants de base :



  1. Le signe de la mantisse –
    C'est aussi simple que le nom. 0 représente un nombre positif tandis que 1 représente un nombre négatif.
  2. L'exposant biaisé -
    Le champ des exposants doit représenter à la fois les exposants positifs et négatifs. Un biais est ajouté à l'exposant réel afin d'obtenir l'exposant stocké.
  3. La mantisse normalisée –
    La mantisse fait partie d'un nombre en notation scientifique ou d'un nombre à virgule flottante, constitué de ses chiffres significatifs. Ici, nous n'avons que 2 chiffres, c'est-à-dire O et 1. Une mantisse normalisée est donc une avec un seul 1 à gauche de la décimale.

Les numéros IEEE 754 sont divisés en deux sur la base des trois composants ci-dessus : simple précision et double précision.

la chaîne java contient




LES TYPES SIGNE EXPOSANT BIAISÉ MANTISE NORMALISÉE BIAIS
Simple précision 1(31ème bits) 8(30-23) 23(22-0) 127
Double precision 1 (63ème bit)



11(62-52) 52(51-0) 1023

Exemple -

85.125 85 = 1010101 0.125 = 001 85.125 = 1010101.001 =1.010101001 x 2^6 sign = 0 1. Single precision: biased exponent 127+6=133 133 = 10000101 Normalised mantisa = 010101001 we will add 0's to complete the 23 bits The IEEE 754 Single precision is: = 0 10000101 01010100100000000000000 This can be written in hexadecimal form 42AA4000 2. Double precision: biased exponent 1023+6=1029 1029 = 10000000101 Normalised mantisa = 010101001 we will add 0's to complete the 52 bits The IEEE 754 Double precision is: = 0 10000000101 0101010010000000000000000000000000000000000000000000 This can be written in hexadecimal form 4055480000000000>

Valeurs spéciales : L'IEEE a réservé certaines valeurs qui peuvent prêter à ambiguïté.

pas égal à mysql
  • Zéro -
    Zéro est une valeur spéciale indiquée par un exposant et une mantisse de 0. -0 et +0 sont des valeurs distinctes, bien qu'elles soient toutes deux égales.



  • Dénormalisé –
    Si l’exposant est entièrement composé de zéros, mais que la mantisse ne l’est pas, la valeur est un nombre dénormalisé. Cela signifie que ce nombre n’a pas de premier supposé avant le point binaire.

  • Infini -
    Les valeurs +infini et -infini sont représentées par un exposant composé uniquement de uns et une mantisse composée uniquement de zéros. Le bit de signe fait la distinction entre l'infini négatif et l'infini positif. Les opérations avec des valeurs infinies sont bien définies dans l'IEEE.

  • Pas un numéro (NAN) –
    La valeur NAN est utilisée pour représenter une valeur qui est une erreur. Ceci est représenté lorsque le champ d'exposant est composé uniquement de un avec un bit de signe zéro ou une mantisse qui n'est pas 1 suivi de zéros. Il s'agit d'une valeur spéciale qui peut être utilisée pour désigner une variable qui ne contient pas encore de valeur.
EXPOSANT MANTISE VALEUR
0 0 exact 0
255 0

tri en tas
Infini
0 pas 0 dénormalisé
255 pas 0

Pas un numéro (NAN)

Similaire pour la double précision (en remplaçant simplement 255 par 2049), plages de nombres à virgule flottante :

Dénormalisé Normalisé Décimal approximatif
Précision unique ±2-149à (1 – 2-23)×2-126 ±2-126à (2 – 2-23)×2127 ± environ 10-44.85à environ 1038.53
Double precision ±2-1074à (1 – 2-52)×2-1022 ±2-1022à (2 – 2-52)×21023 ± environ 10-323,3à environ 10308.3

La plage de nombres à virgule flottante positifs peut être divisée en nombres normalisés et en nombres dénormalisés qui n’utilisent qu’une partie de la précision des fractions. Étant donné que chaque nombre à virgule flottante a une valeur négative correspondante, les plages ci-dessus sont symétriques autour de zéro.

runes en PowerShell

Il existe cinq plages numériques distinctes que les nombres à virgule flottante simple précision ne sont pas en mesure de représenter avec le schéma présenté jusqu'à présent :

  1. Nombres négatifs inférieurs à – (2 – 2-23) × 2127(débordement négatif)
  2. Nombres négatifs supérieurs à – 2-149(sous-versement négatif)
  3. Zéro
  4. Nombres positifs inférieurs à 2-149(sous-versement positif)
  5. Nombres positifs supérieurs à (2 – 2-23) × 2127(débordement positif)

Le débordement signifie généralement que les valeurs sont devenues trop grandes pour être représentées. Le sous-débit est un problème moins grave car il dénote simplement une perte de précision, qui est garantie être proche de zéro.

Le tableau de la plage effective totale des nombres finis à virgule flottante IEEE est présenté ci-dessous :

Binaire Décimal
Célibataire ± (2 – 2-23) × 2127 environ ± 1038.53
Double ± (2 – 2-52) × 21023 environ ± 10308.25

Opérations spéciales -

Opération Résultat
n ÷ ±Infini 0
±Infini × ±Infini ±Infini
±nonZéro ÷ ±0 ±Infini
±fini × ±Infini ±Infini
Infini + Infini
Infini – -Infini
+Infini
-Infini – Infini
-Infini + – Infini
- Infini
±0 ÷ ±0 NaN
±Infini ÷ ±Infini NaN
±Infini × 0 NaN
NaN == NaN FAUX