首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >float64到float32的转换会产生意想不到的结果

float64到float32的转换会产生意想不到的结果
EN

Stack Overflow用户
提问于 2014-05-20 22:25:43
回答 1查看 3.2K关注 0票数 7

当我将float64数字转换为float32数字时,会得到一个奇怪的结果:

代码语言:javascript
运行
复制
In [22]: np.float32(20140131.0)
Out[22]: 20140132.0

为什么会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-20 22:42:33

20140131.0不能表示为32位整数。

32位浮点数

64位浮点数

随着浮动,在每个范围内,数字是均匀的间隔。

所以它是(1+M) * 2^(E)

所以20140131.0在2^24到2^25之间。在这个范围内有16,777,216个数字,但只有8,388,608个可代表的浮动。所以你只能表示偶数。

因为在32位浮点数中,尾数只有23位,所以整数只能表示2^24。在此之上,epsilon > 1。其中epsilon是两个相邻浮点数之间的差值。

至于蟒蛇漂浮,我相信它们的工作方式是这样的:

python中的浮点数通常不是32位,也不是64位,所以这不是问题。长度会自动调整。买吧,你把它们转换成特定的类型,这样你就会发现你缺乏决心。对于64位整数,尾数中有52位,所以在超过2^53之前不会看到这个问题。

此外,数字舍入到最近的浮点数的方式通常是以一种系统范围的方式定义的(我认为),但是python的转换可能会凌驾于这一点之上,我并不完全熟悉它。

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

https://stackoverflow.com/questions/23770993

复制
相关文章

相似问题

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