Quelle est la représentation interne de inf et NaN?
-
11-07-2019 - |
Question
Un ami & amp; Je discutais de la façon dont les Inf et NaN sont stockés pendant le déjeuner de ce jour.
Prenez Fortran 90 par exemple. Les réels de 4 octets peuvent obtenir la valeur de Inf ou NaN. Comment est-ce stocké en interne? Vraisemblablement, un réel de 4 octets est un nombre représenté en interne par un nombre binaire de 32 chiffres. Est-ce que Inf et NaN sont stockés sous forme de nombres binaires 33 bits?
La solution
Spécifiquement à partir du lien du Pesto:
La représentation standard à virgule flottante simple précision IEEE nécessite un mot de 32 bits, pouvant être représenté par un numéro numéroté de 0 à 31, de gauche à droite. Le premier bit est le bit de signe, S
les huit bits suivants sont les bits d'exposant, 'E
' et les 23 derniers bits sont la fraction 'F
':
S EEEEEEEE FFFFFFFFFFFFFFFFFFFFFFF 0 1 8 9 31
La valeur V
représentée par le mot peut être déterminée comme suit:
- Si
E=255
etV=NaN
sont non nuls, alors1
(" pas un nombre ")) - Si
V=-Infinity
et0
est zéro etV=Infinity
est0<E<255
, alorsV=(-1)**S * 2 ** (E-127) * (1.F)
- Si
1.F
etE=0
est zéro etV=(-1)**S * 2 ** (-126) * (0.F)
estV=-0
, alorsV=0
- Si <=> alors <=> où " <=> " est destiné à représenter le nombre binaire créé en préfixant F avec un premier implicite et un binaire point.
- Si <=> et <=> est différent de zéro, alors <=> ces sont & "non normalisés &"; valeurs.
- Si <=> et <=> est zéro et <=> est <=>, alors <=>
- Si <=> et <=> est zéro et <=> est <=>, alors <=>
Autres conseils
La plupart des représentations en virgule flottante sont basées sur le standard IEEE, qui a définir les modèles définis pour Inf et NaN.