给出双重值:
double a
double b
b < a
如果:
double c = a - b;
double d = c + b
然后双数保证:
d == a ?
示例:
double c = 20.0d - 2.0d;
double d = c + 2.0d;
是否真的会再次等于20.0d? 所以一般来说,我问我是否减去并添加相同的双倍它仍然是 相同的价值? 这只是a = 20.0d和b = 2.0d的一种情况。 我需要确保每一个双倍价值。
我尝试了这样的例子:
double s = 4.8d;
System.out.print(s + "\n");
s -= 0.4d;
System.out.print(s + "\n");
s += 0.4d;
System.out.print(s + "\n");
对于这个例子,结果符合我的期望:
4.8
4.3999999999999995
4.8
所以这就是我需要的。
感谢。
答案 0 :(得分:1)
虽然这适用于20和2,但它通常不会起作用:当加法强制表示的指数部分的增量时,它将中断双值:结果将失去一些精度。 / p>
这是一个简单的例子(用Java表示):
double a = 1.0 / 3;
double b = 0.5;
double c = a + b;
double d = c - b;
System.out.println(a);
System.out.println(d);
System.out.println(a == d);
When you run it, this example prints the following:
0.3333333333333333
0.33333333333333326
false
当添加的值的指数不同时,结果变得更加明显。例如,如果您将b
的值从0.5
更改为100000
,则difference would be a lot bigger:
0.3333333333333333
0.3333333333284827
false
将b
更改为1E15
会给出
0.3333333333333333
0.375
false
将b
更改为1E20
会使原始a
的痕迹消失:
0.3333333333333333
0.0
false
答案 1 :(得分:0)
不一定。例如:
> a=1.1; b=10; (a-b) + b
1.0999999999999996