一个有关误差的问题

2016-12-27 13:30:13 +08:00
 scriptish
初学者
java 环境下
double pi =3.14;
int a = 10;
int b = 2;
double z = pi*a*b;
System.out.println(z);

我预期的结果是 62.8
但 myeclipse 的结果是: 62.800000000000004

我的问题是:最后的 4 为什么会出现
如果我想深入了解这个误差为什么会出现,可以去看哪些教材

谢谢了
1990 次点击
所在节点    程序员
9 条回复
misaka19000
2016-12-27 13:53:32 +08:00
IEEE 754
ivvei
2016-12-27 14:14:12 +08:00
你自己琢磨下怎样用二进制来表示一个浮点数的问题应该就有思路了。
tianshuang
2016-12-27 14:27:56 +08:00
深入理解计算机系统
SoloCompany
2016-12-27 21:57:38 +08:00
需要 10 进制浮点运算的请使用 BigDecimal
owt5008137
2016-12-28 09:04:53 +08:00
epsilon
allenhu
2016-12-28 10:32:28 +08:00
0.999999........... = 1
weizhiyao008
2016-12-28 13:56:19 +08:00
IEEE 浮点
或者买本《深入理解计算机系统》,翻了一下目录,大概 67 页开始
TerrenceSun
2016-12-28 15:24:12 +08:00
准确一点,这个问题是二进制浮点的精度问题。
大部分的小数,是没办法用二进制进行精确表示的。
srlp
2016-12-28 16:15:44 +08:00
1 楼和 8 楼结合来看,答案很全面了。

重点在于,初学阶段,你只需要记住 double 是无法准确判定 == 的就好了。

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

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

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

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

© 2021 V2EX