2011-04-22 9 views
9

que estaba leyendo la definición léxica para la sintaxis de cadena decimal válido en la documentación para decimal.Decimal y el siguiente me pareció un poco raro:Significado de dígitos después NaN en Python decimal objeto

nan   ::= 'NaN' [digits] | 'sNaN' [digits] 

Esto se veía muy extraño Yo, pero aparentemente los dígitos se pueden incluir después de 'NaN' sin ningún problema, pero cualquier carácter además de los dígitos después de 'NaN' plantea InvalidOperation.

>>> Decimal('NaN10') 
Decimal('NaN10') 

Así que tengo algunas preguntas acerca de este:

  1. ¿Cuál es el significado de dígitos que forman parte de NaN?
  2. ¿Cómo se comportan las instancias de NaN con dígitos de forma diferente a un NaN "normal"?
  3. ¿Hay formas de obtener un NaN con dígitos además de inicializarlo de esa manera?
  4. ¿Hay otros lugares en Python además de la clase Decimal donde NaN se pueden seguir por dígitos?

¡Gracias!

Respuesta

6

Es un IEEE-754 feature para distinguir entre diferentes tipos de NaN (la "carga útil"). Los dígitos están codificados en la mantisa del número:

>>> Decimal("NaN456").as_tuple() 
DecimalTuple(sign=0, digits=(4, 5, 6), exponent='n') 
>>> Decimal("NaN123").as_tuple() 
DecimalTuple(sign=0, digits=(1, 2, 3), exponent='n') 
>>> Decimal("NaN").as_tuple() 
DecimalTuple(sign=0, digits=(), exponent='n') 

El único propósito de la carga útil es el diagnóstico. Estos NaN no son diferentes de los NaN "normales".