两个浮点数之间的浮点数数量

12 投票
4 回答
2733 浏览
提问于 2025-04-16 03:24

假设我有两个Python中的浮点数 ab,有没有简单的方法可以找出在这两个数之间,用IEEE-754格式(或者机器使用的其他格式)能表示多少个真实数字呢?

4 个回答

3

对于正数 b > a > 0,答案是大约

(2**52) ** (log(b,2) - log(a,2))

这里有52位有效数字(在隐含的1之后),再乘以2的某个指数。

所以在范围[1:2)内有2的52次方个数字,就像在范围[1024:2048)一样。

14

据我所知,IEEE754格式的浮点数有一个有趣的特性。如果你有一个浮点数f,那么

(*(int*)&f + 1)

在某些条件下,它是下一个可以表示的浮点数。所以对于浮点数a和b来说,

*(int*)&a - *(int*)&b

这个操作会告诉你在这两个数字之间有多少个浮点数。

想了解更多信息,可以查看这个链接:http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

12

我不知道你打算怎么用这个,但如果两个浮点数的指数相同,那应该是可以做到的。因为指数是保存在高位的,所以可以把这两个浮点数的字节(在这个例子中是8个字节)当作整数来加载,然后相互减去,就能得到你想要的结果。我使用结构体模型把浮点数打包成二进制表示,然后再把它们解包成(C,8字节)长整型:

>>> import struct
>>> a = struct.pack("dd", 1.000000,1.000001)
>>> b = struct.unpack("ll",a)
>>> b[1] - b[0]
4503599627
>>> a = struct.pack("dd", 1.000000000,1.000000001)
>>> b = struct.unpack("ll",a)
>>> b[1] - b[0]
4503600
>>>

撰写回答