python – 如何实现Inf和NaN?

作为数学概念,我很清楚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的特殊位模式,它们由硬件浮点单元识别.

IEEE 64位浮点数,在典型系统中用于CPython的类型,符号为1位,指数为11位,尾数为52位.见https://en.wikipedia.org/wiki/Double-precision_floating-point_format

如果指数包含0b11111111111(全1),则该数字为inf或nan,具体取决于尾数中存储的内容. Python不需要做任何特殊处理这些情况的事情.无论是比较Python,C,Java还是汇编语言中的数字,都会得到相同的结果.

上一篇:JavaScript操作符


下一篇:扁平化数组