Qu’est-ce qu’un nombre à virgule flottante inférieure à la normale?

La page de référence isnormal () indique:

Détermine si le nombre à virgule flottante donné arg est normal, c.-à-d. Qu’il n’est ni nul, ni inférieur à la normale, ni infini, ni NaN.

Un nombre égal à zéro, infini ou NaN indique clairement ce que cela signifie. Mais cela dit aussi subnormal. Quand un nombre subnormal?

Dans la norme IEEE754, les nombres à virgule flottante sont représentés sous forme de notation scientifique binary, x = M × 2 e . Ici M est la mantisse et e est l’ exposant . Mathématiquement, vous pouvez toujours choisir l’exposant de manière à ce que 1 ≤ M <2. * Cependant, dans la représentation par ordinateur, l'exposant ne peut avoir qu'un nombre fini, il y a des nombres plus grands que zéro mais inférieurs à 1,0 × 2 e min . Ces chiffres sont les sousnormales ou dénormals .

En pratique, la mantisse est stockée sans le premier, car il y a toujours un 1, sauf pour les nombres inférieurs à la normale (et zéro). Ainsi, l’interprétation est que si l’exposant est non minimal, il y a un premier implicite, et si l’exposant est minimal, il n’y en a pas et le nombre est inférieur à la normale.

*) Plus généralement, 1 ≤ M < B pour toute notation scientifique de base- B .

À partir de http://blogs.oracle.com/d/entry/subnormal_numbers :

Il y a potentiellement plusieurs façons de représenter le même nombre, en utilisant un nombre décimal comme exemple, le nombre 0,1 pourrait être représenté par 1 * 10 -1 ou 0,1 * 10 0 ou même 0,01 * 10. La norme stipule que les numéros sont toujours stockés avec le premier bit comme un. En décimal, cela correspond à l’exemple 1 * 10-1.

Supposons maintenant que l’exposant le plus bas pouvant être représenté soit -100. Le plus petit nombre pouvant être représenté sous une forme normale est donc 1 * 10 -100 . Cependant, si nous relâchons la contrainte que le premier bit soit un, nous pouvons alors représenter des nombres plus petits dans le même espace. En prenant un exemple décimal, nous pourrions représenter 0.1 * 10 -100 . Cela s’appelle un nombre inférieur à la normale. Le but d’avoir des nombres inférieurs à la normale est de lisser l’écart entre le plus petit nombre normal et zéro.

Il est très important de réaliser que les nombres inférieurs à la normale sont représentés avec moins de précision que les nombres normaux. En fait, ils échangent une précision réduite pour leur plus petite taille. Par conséquent, les calculs utilisant des nombres inférieurs à la normale n’auront pas la même précision que les calculs effectués sur des nombres normaux. Ainsi, une application qui effectue un calcul significatif sur des nombres inférieurs à la normale mérite probablement d’être étudiée pour voir si le redimensionnement (multipliant les nombres par un facteur d’échelle) produirait moins de sous-normales et des résultats plus précis.