首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个浮点数之间的浮点数

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

Stack Overflow用户
提问于 2010-08-28 04:26:50
回答 4查看 2K关注 0票数 12

假设我有两个Python浮点数ab,有没有一种简单的方法来找出在IEEE754表示法(或机器使用的任何表示法)中,这两个浮点数之间有多少个可表示的实数?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-08-28 04:43:15

我不知道你要用这个做什么--但是,如果两个浮点数有相同的指数,它应该是可能的。由于指数保持在高位上,将浮点字节(在本例中为8字节)加载为整数,然后从另一个字节中减去一,应该会得到您想要的数字。我使用struct模型将浮点数打包为二进制表示,然后将它们解包为(C,8字节)长整数:

代码语言:javascript
复制
>>> 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
>>>
票数 12
EN

Stack Overflow用户

发布于 2010-08-28 04:45:29

IEEE754浮点数有一个有趣的属性。如果您有float f,那么

代码语言:javascript
复制
(*(int*)&f + 1)

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

代码语言:javascript
复制
*(int*)&a - *(int*)&b

将给出这些数字之间的浮点数的数量。

有关详细信息,请参阅http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm

票数 13
EN

Stack Overflow用户

发布于 2010-08-28 04:38:40

对于正数b>a> 0,答案近似为

代码语言:javascript
复制
(2**52) ** (log(b,2) - log(a,2))

尾数有52位(超过隐含的1 ),乘以2得到一个指数。

因此,在范围[1:2]中有2**52个数字,如在范围[1024:2048]中一样

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3587880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档