我正在阅读decimal.Decimal
文档中有效的十进制字符串语法的词法定义,下面的内容让我觉得有点奇怪:
nan ::= 'NaN' [digits] | 'sNaN' [digits]
这对我来说看起来真的很奇怪,但显然数字可以在'NaN'之后包含而没有任何问题,但是'NaN'之后除了数字之外的任何字符都会引发InvalidOperation
。
>>> Decimal('NaN10')
Decimal('NaN10')
我有几个问题:
- 属于
NaN
的数字是什么意思 - 数字
NaN
的实例如何与"正常"NaN
的行为不同? - 有办法获得
NaN
与数字除了初始化它的方式? - 除了
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没有什么不同。