¿Por qué IEEE 754 reserva tantos valores NaN?


Parece que el estándar IEEE 754 define 16,777,214 valores de coma flotante de 32 bits como NaNs, o 0.4% de todos los valores posibles.

Me pregunto cuál es la razón para reservar tantos valores útiles, mientras que solo se necesitan 2 esencialmente: uno para la señalización y otro para la NaN silenciosa.

Lo siento si esta pregunta es trivial, no pude encontrar ninguna explicación en Internet.

Author: Pascal Cuoq, 2013-11-06

2 answers

El estándar IEEE-754 define un NaN como un número con todos los unos en el exponente, y un significante distinto de cero. El bit de orden más alto en el significando especifica si la NaN es una señal o una silenciosa. Los bits restantes del significando forman lo que se conoce como la carga útil de la NaN.

Cuando uno de los operandos de una operación es un NaN, el resultado es un NAN, y la carga útil del resultado es igual a la carga útil de uno de los operandos NaN. Preservación de la carga útil es importante para la eficiencia en la computación científica, y al menos una empresa ha propuesto el uso de cargas útiles NaN para usos patentados.

En términos más básicos, una NaN no lleva ninguna información numérica útil, y los 32 bits completos deben reservarse de todos modos, por lo que los bits no utilizados en el significand se desperdiciarían si no hubiera una carga útil definida en el estándar.

 23
Author: Robert Harvey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-05 23:11:31

También hay una carga útil para números de coma flotante de 64 bits, con ~10^15 valores posibles. Desafortunadamente, las implementaciones divergen en cuanto a cómo se debe transferir la carga útil entre números de coma flotante de 32 y 64 bits y viceversa, es decir, si conserva los bits más significativos o menos significativos. Dado que el tratamiento de la carga útil es específico de la máquina, necesita un código diferente para lidiar con las cargas útiles en diferentes máquinas.

No me preocuparía demasiado por qué NaN la carga útil se propaga después de una operación binaria. Los NAN son valores excepcionales que ocurren con baja probabilidad, y la probabilidad de obtener 2 de ellos es poco probable.

 0
Author: Reality Pixels,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-14 17:00:11