Python是否定义了“NaN> 0”的值?在我的Python解释器中,我得到:
>>> float('nan') > 0
False
但这有保证吗?
如果我理解正确,IEEE 754标准会指定False to any comparison involving NaN。但是,我在Python文档中找不到任何表明遵循此标准的内容。我甚至理解1/0
应该在IEEE 754下给出无穷大,但是Python引发了异常(ZeroDivisionError
),所以Python并没有完全遵循IEEE 754。
那么,float('nan') > 0
在Python中完全定义的结果是什么?我需要知道它是否在所有平台上以及所有版本的Python(包括旧版本)都是相同的。
答案 0 :(得分:4)
我在各种平台上使用的所有Python实现都使用IEEE-754,并且行为与您描述的一样。
但是,这似乎没有被语言强制要求。以至于tutorial有以下内容(强调我的):
几乎今天(2010年7月)所有机器都使用IEEE-754浮点运算,几乎所有平台都将Python浮点数映射到IEEE-754“双精度”。< / p>
以下是2008年的相关主题:Python on non IEEE-754 platforms: plea for information。
检查您的口译员/平台是否符合您的预期非常容易。如果您严重依赖于此,则可以在程序启动时轻松检测到不合规情况。
答案 1 :(得分:0)
我认为这是一个非常安全的假设。 math
library文档暗示 python的NaN
应该按照IEEE 754中的规定行事。
当然,如果你对它真的很偏执,你可以编写一个UnitTest然后如果你找到一个不存在的系统,至少你会马上知道。
答案 2 :(得分:0)
这个link表明,NaN概念是从2.3版本的python中加入的。因此,在当前使用的版本中,它应该在所有平台上都相同。
它还在math库中有一个实现。
e.g。 math.isnan()
Checks if the float x is a NaN (not a number).
NaNs are part of the IEEE 754 standards. Operation like but not limited to
inf * 0, inf / inf or any operation involving a NaN, e.g. nan * 1, return a NaN.
New in version 2.6.
>>> import math
>>> x=float('nan')
>>> math.isnan(x)
True
>>>