【发布时间】:2017-12-05 12:04:19
【问题描述】:
作为数学概念,我很清楚inf 和nan 实际上是什么。但我真正感兴趣的是它们是如何在编程语言中实现的。
在python中,我可以在算术和条件表达式中使用inf和nan,如下所示:
>>> nan = float('nan')
>>> inf = float('inf')
>>> 1 + inf
inf
>>> inf + inf
inf
>>> inf - inf
nan
这会让我相信python内部对这两个数学量有一个特殊的保留位序列,没有其他数字可以占据这些位置。我的假设正确吗?能否请您在这方面赐教?
如果我的假设是正确的,那么这很容易解释:
>>> inf == inf
True
但是,这不是:
>>> nan == nan
False
显然,在数学中,这是正确的答案。但是在这种情况下,python 怎么知道它应该吐出False 呢?
另外,python的实现与java或c++有什么不同?
【问题讨论】:
-
因为用于比较的浮点机器指令在将 nan 与任何事物(包括其自身)进行比较时返回 false
-
这与IEEE 754 标准有关。
-
几乎所有编程语言都将 IEEE 754 用于浮点值,它精确地定义了这些特殊值是什么、它们如何表示以及它们在各种操作中的行为方式。
-
现代 cpu:s 对此有支持。它不需要“实施”
-
请阅读相当经典的论文wrt数学:lsi.upc.edu/~robert/teaching/master/material/p5-goldberg.pdf