Le format à virgule flottante simple précision (parfois appelé FP32 , float32 ou float ) est un format numérique informatique , occupant généralement 32 bits en mémoire ; il rep...
Worldlex WikiFrancaisLecture gratuite
Le format à virgule flottante simple précision (parfois appelé FP32 , float32 ou float ) est un format numérique informatique , occupant généralement 32 bits en mémoire ; il représente une large gamme de valeurs numériques en utilisant une virgule flottante .
Une variable à virgule flottante peut représenter une plage de nombres plus étendue qu'une variable à virgule fixe de même largeur de bits, au détriment de la précision. Une variable entière signée de 32 bits a une valeur maximale de 2 <sup>31</sup> − 1 = 2 147 483 647, tandis qu'une variable à virgule flottante binaire de 32 bits conforme à la norme IEEE 754 a une valeur finie maximale de (2<sup>-2</sup> − 2 <sup>-23</sup> ) × 2<sup> 127</sup> ≈ 3,4028235 × 10<sup> 38</sup> . Tous les entiers à sept chiffres décimaux ou moins, et tout entier 2<sup> n</sup> tel que −149 ≤ n ≤ 127, peuvent être convertis exactement en une valeur à virgule flottante simple précision conforme à la norme IEEE 754.
Fortran fut l'un des premiers langages de programmation à proposer des types de données à virgule flottante simple et double précision . Avant l'adoption généralisée de la norme IEEE 754-1985, la représentation et les propriétés des types de données à virgule flottante dépendaient du fabricant et du modèle de l'ordinateur, ainsi que des choix des concepteurs du langage. Par exemple, le type de données simple précision de GW-BASIC était le format MBF 32 bits .
En Common Lisp, la simple précision est appelée SINGLE-FLOAT ; float binary(p) avec p ≤ 21, float decimal(p) avec la valeur maximale de p dépendant de la présence ou non de l’attribut DFP (IEEE 754 DFP), en PL/I ; float en C avec prise en charge IEEE 754, C++ (si le langage est en C), C# et Java ; Float en Haskell et Swift ; et Single en Object Pascal ( Delphi ), Visual Basic et MATLAB . Cependant, float en Python , Ruby , PHP et OCaml , et single dans les versions d’ Octave antérieures à 3.2, font référence à des nombres en double précision . Dans la plupart des implémentations de PostScript et certains systèmes embarqués , seule la précision simple est prise en charge.
La norme IEEE 754 spécifie qu'un binaire32 possède :
Cela permet une précision de 6 à 9 chiffres décimaux significatifs . Si une chaîne décimale comportant au maximum 6 chiffres significatifs est convertie au format simple précision IEEE 754, donnant un nombre normal , puis reconvertie en une chaîne décimale avec le même nombre de chiffres, le résultat final doit correspondre à la chaîne d'origine. Si un nombre simple précision IEEE 754 est converti en une chaîne décimale comportant au moins 9 chiffres significatifs, puis reconverti en représentation simple précision, le résultat final doit correspondre au nombre d'origine.
Le bit de signe détermine le signe du nombre, qui est également celui de la mantisse. « 1 » représente un nombre négatif. Le champ de l'exposant est un entier non signé de 8 bits compris entre 0 et 255, sous forme biaisée : la valeur 127 représente l'exposant zéro. Les exposants vont de −126 à +127 (donc de 1 à 254 dans le champ de l'exposant), car les valeurs biaisées 0 (tous les bits à 0) et 255 (tous les bits à 1) sont réservées aux nombres spéciaux ( nombres sous-normaux , zéros signés , infinis et NaN ).
La mantisse des nombres normaux comprend 23 bits de fraction à droite de la virgule binaire et un bit de poids fort implicite (à gauche de la virgule binaire) de valeur 1. Les nombres sous-normaux et les zéros (qui sont les nombres à virgule flottante de magnitude inférieure au plus petit nombre normal positif) sont représentés avec un exposant biaisé de 0, ce qui attribue la valeur 0 au bit de poids fort implicite. Ainsi, seuls 23 bits de fraction de la mantisse apparaissent dans le format mémoire, mais la précision totale est de 24 bits (équivalent à log₁₀ ( 2²⁴ ) ≈ 7,225 chiffres décimaux) pour les nombres normaux ; la précision des nombres sous-normaux diminue progressivement jusqu'à 1 bit pour la plus petite valeur non nulle.
Les éléments sont disposés comme suit :
La valeur réelle prise par des données binaires 32 bits données, avec un signe donné , un exposant biaisé E (l'entier non signé de 8 bits) et une fraction de 23 bits, est
ce qui donne
Dans cet exemple :
ainsi:
Note:
Encodage des exposants
L'exposant à virgule flottante binaire simple précision est codé à l'aide d'une représentation binaire décalée , le décalage zéro étant de 127 ; également connu sous le nom de biais d'exposant dans la norme IEEE 754.
Ainsi, afin d'obtenir le véritable exposant tel que défini par la représentation binaire décalée, le décalage de 127 doit être soustrait de l'exposant stocké.
Les exposants stockés 00 H et FF H sont interprétés de manière spéciale.
La valeur normale positive minimale est
Conversion de décimal en binaire32
( Apprenez comment et quand supprimer ce message )
En général, reportez-vous à la norme IEEE 754 elle-même pour la conversion stricte (y compris le comportement d'arrondi) d'un nombre réel dans son format binaire32 équivalent.
Nous pouvons ici montrer comment convertir un nombre réel en base 10 au format binaire IEEE 75432 en utilisant le schéma suivant :
Prenons l'exemple d'un nombre réel composé d'une partie entière et d'une partie fractionnaire, tel que 12,375.
Convertissez la partie fractionnaire en utilisant la technique suivante, comme indiqué ici.
Additionnez les deux résultats et ajustez-les pour obtenir une conversion finale correcte.
Conversion de la partie fractionnaire : Prenons 0,375, la partie fractionnaire de 12,375. Pour la convertir en fraction binaire, multipliez la fraction par 2, prenez la partie entière et répétez l’opération avec la nouvelle fraction multipliée par 2 jusqu’à obtenir une fraction nulle ou jusqu’à ce que la limite de précision soit atteinte, soit 23 chiffres après la virgule pour le format binaire IEEE 754.
La partie entière représente le chiffre des fractions binaires. Multipliez à nouveau 0,750 par 2 pour continuer.
, fraction = 0,011, terminer
Nous constatons quepeut être représenté exactement en binaire commeToutes les fractions décimales ne peuvent pas être représentées par une fraction binaire à nombre fini de chiffres. Par exemple, la valeur décimale 0,1 ne peut être représentée exactement en binaire, seulement approximativement. Par conséquent :
Étant donné que le format binaire IEEE 754 exige que les valeurs réelles soient représentées en(voir Nombre normalisé , Nombre dénormalisé ), 1100,011 est décalé de 3 chiffres vers la droite pour devenir
Finalement, nous pouvons constater que :
Nous en déduisons :
L'exposant est 3 (et sous sa forme biaisée, il est donc)
La fraction est 100011 (en regardant à droite de la virgule binaire).
À partir de ces éléments, nous pouvons former la représentation résultante au format binaire IEEE 754 32 bits de 12,375 :
Remarque : il est conseillé de convertir la norme 68.123 au format binaire IEEE 75432. En suivant la procédure ci-dessus, vous devriez obtenir le résultat suivant :les 4 derniers bits étant 1001. Cependant, en raison du comportement d'arrondi par défaut du format IEEE 754, vous obtenez :, dont les 4 derniers bits sont 1010.
Exemple 1 : Prenons le nombre décimal 1. On peut constater que :
Nous en déduisons :
L'exposant est 0 (et sous forme biaisée, il est donc
La fraction est 0 (en regardant à droite de la virgule binaire dans 1,0, tout est)
À partir de ces éléments, nous pouvons former la représentation résultante au format binaire IEEE 754 32 bits du nombre réel 1 :
Exemple 2 : Prenons la valeur 0,25. On peut constater que :
Nous en déduisons :
L'exposant est −2 (et sous forme biaisée, il est)
La fraction est 0 (à droite de la virgule binaire dans 1,0, on ne voit que des zéros).
À partir de ces éléments, nous pouvons former la représentation au format binaire IEEE 754 32 bits du nombre réel 0,25 :
Exemple 3 : Prenons la valeur 0,375. Nous avons vu que
Par conséquent, après avoir déterminé une représentation de 0,375 commenous pouvons procéder comme indiqué ci-dessus :
L'exposant est −2 (et sous forme biaisée, il est)
La fraction est 1 (en regardant à droite du point binaire dans 1,1, on trouve un seul)
À partir de ces éléments, nous pouvons former la représentation au format binaire IEEE 754 32 bits du nombre réel 0,375 :
Conversion de binaire 32 bits en décimal
( Apprenez comment et quand supprimer ce message )
Si la valeur binary32, 41C80000 dans cet exemple, est en hexadécimal, nous la convertissons d'abord en binaire :
Nous le décomposons ensuite en trois parties : le bit de signe, l’exposant et la mantisse.
Bit de signe :
Exposant:
Significand :
Nous ajoutons ensuite le 24e bit implicite à la mantisse :
Significand :
et décoder la valeur de l'exposant en soustrayant 127 :
Exposant brut :
Exposant décodé :
Chacun des 24 bits de la mantisse (y compris le 24e bit implicite), du bit 23 au bit 0, représente une valeur, commençant à 1 et divisée par deux pour chaque bit, comme suit :
Dans cet exemple, la mantisse a trois bits à 1 : le bit 23, le bit 22 et le bit 19. Nous pouvons maintenant décoder la mantisse en additionnant les valeurs représentées par ces bits.
Significand décodé :
Il faut ensuite multiplier par la base, 2, à la puissance de l'exposant, pour obtenir le résultat final :
Ainsi
Cela équivaut à :
où est l'exposant et Limitations de précision sur les valeurs décimales (entre 1 et 16777216)
Décimales entre 1 et 2 : intervalle fixe 2 −23 (1+2 −23 est le plus grand nombre flottant suivant après 1)
Décimales entre 2 et 4 : intervalle fixe 2 −22
Décimales entre 4 et 8 : intervalle fixe 2 −21
...
Décimales comprises entre 2n et 2n +1 : intervalle fixe 2n−23
Décimales comprises entre 2²³ = 8 388 608 et 2²⁴ = 16 777 216 : intervalle fixe 2⁰ = 1
Limitations de précision sur les valeurs entières
Les entiers compris entre -16 777 216 et 16 777 216 (0 inclus) peuvent être représentés exactement.
Les entiers compris entre 2²⁴ = 16 777 216 et 2²⁵ = 33 554 432 sont arrondis au multiple de 2 (nombre pair).
Les entiers compris entre 2²⁵ et 2²⁶ sont arrondis au multiple de 4.
...
Les entiers compris entre 2n et 2n+1 sont arrondis au multiple de 2n−23.
...
Les entiers compris entre 2 127 et 2 128 sont arrondis au multiple de 2 104.
Les entiers supérieurs ou égaux à 2 128 sont arrondis à « l'infini ».
Cas remarquables en simple précision
Ces exemples sont donnés en représentation binaire ( hexadécimale et binaire ) de la valeur à virgule flottante. Ceci inclut le signe, l'exposant (biaisé) et la mantisse.
Par défaut, 1/3 est arrondi à l'entier supérieur, contrairement à la double précision qui arrondit à l'entier inférieur, en raison du nombre pair de bits dans la mantisse. Les bits de 1/3 au-delà de la virgule d'arrondi sont 1010...supérieurs à la moitié d'une unité en position finale .
Les encodages de qNaN et sNaN ne sont pas spécifiés dans la norme IEEE 754 et leur implémentation diffère selon les processeurs. Les processeurs des familles x86 et ARM utilisent le bit de poids fort du champ de mantisse pour indiquer un NaN silencieux . Les processeurs PA-RISC utilisent ce bit pour indiquer un NaN signalant .