假设我有两个Python浮点数a和b,有没有一种简单的方法来找出在IEEE754表示法(或机器使用的任何表示法)中,这两个浮点数之间有多少个可表示的实数?
发布于 2010-08-28 04:43:15
我不知道你要用这个做什么--但是,如果两个浮点数有相同的指数,它应该是可能的。由于指数保持在高位上,将浮点字节(在本例中为8字节)加载为整数,然后从另一个字节中减去一,应该会得到您想要的数字。我使用struct模型将浮点数打包为二进制表示,然后将它们解包为(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
>>>发布于 2010-08-28 04:45:29
IEEE754浮点数有一个有趣的属性。如果您有float f,那么
(*(int*)&f + 1)在某些条件下,是下一个可表示的浮点数。所以对于浮点数a和b
*(int*)&a - *(int*)&b将给出这些数字之间的浮点数的数量。
有关详细信息,请参阅http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm。
发布于 2010-08-28 04:38:40
对于正数b>a> 0,答案近似为
(2**52) ** (log(b,2) - log(a,2))尾数有52位(超过隐含的1 ),乘以2得到一个指数。
因此,在范围[1:2]中有2**52个数字,如在范围[1024:2048]中一样
https://stackoverflow.com/questions/3587880
复制相似问题