【发布时间】:2011-08-17 01:18:21
【问题描述】:
所以这是代码中唯一相关的部分
System.out.println("first term of " + firstTerm +
" second term of " + secondTerm +
" third term of " + finalTermHolder +
" should equal " + oppositeIntHolder);
double holder = firstTerm + secondTerm + finalTermHolder;
System.out.println(holder + " should equal " + oppositeIntHolder);
这是不间断的代码,它们之间没有任何内容。第一个 println 的输出是:
first term of 2.5147186257614296 second term of -9.514718625761429 third term of 7.0 should equal 0.0
第二个 println 的结果是:
8.881784197001252E-16 should equal 0.0
为什么 -9.5、2.5 和 7 加起来是 8.9 而不是 0?
【问题讨论】:
-
加起来不是8.9,而是加起来是0.00000000000000089
-
是8.9E-16,和8.9不一样。实际上,8.9E-16 = 0.00000000000000089,由于近似值,在浮点计算中与0相同。
-
en.wikipedia.org/wiki/Floating_point 有一篇很好的论文,如果您真的感兴趣,可以提供更多相关链接。
-
我实际上意识到了这个错误和科学记数法,只是对 E 的含义一无所知。抱歉暂时失去情报。无论如何,修改问题。
-
我提名这个问题及其所有疯狂的编辑作为当日的 stackoverflow 问题奖。