我正在研究python。我尝试了numpy.spacing(0),得到了4.9406564584124654e-324,它明显小于finfo(float)
怎么可能呢?
我在网上找不到答案,从浮点标准来看,这个数字当然是不可能的。

最佳答案

好吧,让我们看看4.94E-324到底是什么:

>>> from math import log
>>> log(4.94e-324, 2)
-1074.0

为了确保:
>>> 2**-1074
5e-324

这绝对小于-1022的最小指数。实际上,它比最小值(有效位的位数)少52。这里发生了一些有趣的事情…
实际得到的是一个subnormal浮点数,它是用零的指数(解释为实际可能的最低指数)编码的,并且放宽了通常的规则,即有效位必须以二进制1开头,允许您以牺牲精度的代价来表示非常小的数:
>>> (5e-324).hex()
'0x0.0000000000001p-1022'

09-25 21:20