Pourquoi IEEE 754 réserve-t-il autant de valeurs NaN?

Il semble que la norme IEEE 754 définit 16 777 214 valeurs à virgule flottante 32 bits comme NaNs, soit 0,4% de toutes les valeurs possibles.

Je me demande Quelle est la raison de réserver autant de valeurs utiles, alors que seulement 2 sont essentiellement nécessaires: une pour la signalisation et une pour le Nan tranquille.

Désolé si cette question est triviale, Je n'ai trouvé aucune explication sur internet.

27
demandé sur Pascal Cuoq 2013-11-06 02:34:19

2 réponses

La norme IEEE-754 définit un NaN comme un nombre avec tous les uns dans l'exposant, et un significand non nul. Le bit d'ordre le plus élevé dans le significand spécifie si le NaN est un signal ou silencieux. Les bits restants du significand forment ce que l'on appelle la Charge utile du NaN.

Chaque fois qu'un des opérandes d'une opération est un NaN, le résultat est un NaN, et la charge utile du résultat est égale à la charge utile de l'un des opérandes NaN. Conservation de la charge utile est important pour l'efficacité de l'informatique scientifique, et au moins une entreprise a proposé d'utiliser des charges utiles NaN pour des utilisations propriétaires.

En termes plus basiques, un NaN ne porte aucune information numérique utile, et les 32 bits entiers doivent être réservés De toute façon, de sorte que les bits inutilisés dans le significand seraient autrement gaspillés s'il n'y avait pas de charge utile définie dans la norme.

23
répondu Robert Harvey 2013-11-05 23:11:31

Il existe également une charge utile pour les nombres à virgule flottante 64 bits, avec ~10^15 valeurs possibles. Malheureusement, les implémentations divergent quant à la façon dont la charge utile doit être transférée entre les nombres à virgule flottante 32 et 64 bits et inversement, c'est-à-dire si vous conservez les bits les plus significatifs ou les moins significatifs. Étant donné que le traitement de la charge utile est spécifique à la machine, vous avez besoin d'un code différent pour gérer les charges utiles sur différentes machines.

Je ne m'inquiéterais pas trop de quelle NaN la charge utile est propagée après une opération binaire. Les nan sont des valeurs exceptionnelles qui se produisent avec une faible probabilité, et la probabilité d'en obtenir 2 est peu probable.

0
répondu Reality Pixels 2014-05-14 17:00:11