Python十进制对象中NaN之后的数字含义

And*_*ark 9 python

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

nan            ::=  'NaN' [digits] | 'sNaN' [digits]
Run Code Online (Sandbox Code Playgroud)

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

>>> Decimal('NaN10')
Decimal('NaN10')
Run Code Online (Sandbox Code Playgroud)

所以我对此有几个问题:

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

谢谢!

ken*_*ytm 6

它是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')
Run Code Online (Sandbox Code Playgroud)

有效载荷的唯一目的是用于诊断.这些NaN与"正常"NaN没有区别.