Python 处理浮点运算,为什么浮点位数会有误差?

2019-09-22 23:49:01 +08:00
 miniyao

后面很长的尾巴是怎么来的?

>>> 9.9 * 0.4
3.96oooooooooooo4
>>> 9.9 * 0.6
5.94
>>> 9.9 * 0.8
7.92oooooooooooo1
5081 次点击
所在节点    Python
24 条回复
ynyounuo
2019-09-22 23:52:00 +08:00
好消息,21 世纪美国新出的产品谷歌可以免费给你这类问题的答案了!
by73
2019-09-22 23:56:55 +08:00
引子 * 乎:请重修 IEEE 754
ZRS
2019-09-23 00:00:28 +08:00
浮点数本来就有误差....
gclove
2019-09-23 00:01:58 +08:00
好消息,21 世纪美国新出的产品谷歌可以免费给你这类问题的答案了!

把数字转换成二进制你就知道了,你应该使用二进制计算,而不是 10 进制
ipwx
2019-09-23 00:20:51 +08:00
月经贴,总是以各种方式见到这个问题。

IEEE 754
qiayue
2019-09-23 00:27:53 +08:00
跟具体的语言无关,任何语言都会出现浮点数计算误差
关键字:浮点数二进制
Yourshell
2019-09-23 00:32:15 +08:00
几乎所有 cs 入门教程都有提到这个问题,虽然我忘了🐱
Raymon111111
2019-09-23 00:47:22 +08:00
十进制的有限小数表达成二进制可能是无限小数
caomu
2019-09-23 00:50:55 +08:00
好消息!好消息!本站成功和谷歌达成合作关系,以后大家有什么想问的问题可以直接谷歌搜索,不需要在发帖问了,可以省下大家很多时间!非常方便!
eric6356
2019-09-23 00:52:27 +08:00
cherbim
2019-09-23 05:17:49 +08:00
所有的语言入门都会提到这个问题,详情 ieee 754 标准
334862132
2019-09-23 05:19:10 +08:00
跟 python 语言美关系,这个涉及到计算机底层原理,所有语言都一个样 python 的话用 decimal 包之后变成 str 试试吧
Karpov
2019-09-23 09:27:39 +08:00
感谢楼主,重新学习了一下·
https://juejin.im/entry/575543857db2a2006993114e
Pythondr
2019-09-23 10:14:46 +08:00
这种基础的问题为什么不自己去看去学习呢?
https://juejin.im/post/5d6e74c35188254628237d5d
mcluyu
2019-09-23 10:17:23 +08:00
二进制无法精确表示十进制的浮点数
Vegetable
2019-09-23 10:19:30 +08:00
题注这样也好,让很多人都学习\复习了一遍这个知识
ps1aniuge
2019-09-23 12:41:22 +08:00
PS A:\pscode> 9.9 * 0.4
3.96
PS A:\pscode>

powershell 没这问题。或者说默认设置好一些。

在 powershell 中,有自动的数字类型判断,当然你也可以手动。
默认 1/3*3 = 1
也可以手动设定[decimal]1/3*3 = 0.9999999999999
no1xsyzy
2019-09-23 12:52:24 +08:00
@ps1aniuge
PS > 9.9*0.4-3.96
4.44089209850063E-16
并不是没这问题,只是最终结果精度太低罢了
mangoDB
2019-09-23 13:00:43 +08:00
你需要了解一下,在计算机中,是如何通过二进制来表示`浮点数`的。
gIrl1990
2019-09-23 13:33:53 +08:00
我来说一个题外的:
ECMAScript uses a double-precision 64-bit binary format IEEE 754-2008 value for number
`Number.MIN_SAFE_INTEGER` `Number.MAX_SAFE_INTEGER`

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/603157

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX