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

9

我正在阅读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之后跟随数字?

谢谢!

1个回答

6

IEEE-754标准引入了一种特性(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')

负载的唯一目的是进行诊断。这些NaN与“正常”的NaN没有区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接