Python Decimal对象中NaN后数字的含义



我正在阅读decimal.Decimal文档中有效的十进制字符串语法的词法定义,下面的内容让我觉得有点奇怪:

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

这对我来说看起来真的很奇怪,但显然数字可以在'NaN'之后包含而没有任何问题,但是'NaN'之后除了数字之外的任何字符都会引发InvalidOperation

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

我有几个问题:

  1. 属于NaN的数字是什么意思
  2. 数字NaN的实例如何与"正常"NaN的行为不同?
  3. 有办法获得NaN与数字除了初始化它的方式?
  4. 除了Decimal类之外,Python中还有其他地方可以后跟数字NaN吗?

谢谢!

这是IEEE-754区分不同类型的nan("有效载荷")的特性。这些数字被编码成数字的尾数:

>>> 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')

负载的唯一目的是诊断。这些NaNs与"普通"NaNs没有什么不同。

最新更新