为什么这个等式在C(32位)和Java(64位)中为e
生成两个不同的值?它们的数量出乎意料地大了很多。
int a, b, c, d;
double e;
a = -12806;
b = 1;
c = 800;
d = 19209;
double f = (32768 / 10.24);
e = (a + (double) b / c * d) / f;
C产生-3.9940624237060547。 Java生成-3.9943714843750002。
更新:
很抱歉,这个错误似乎不是我预期的。我把我的代码简化为这个等式,它产生的数字更接近。
答案 0 :(得分:1)
在Java中,隐式括号有点不同:
int a, b, c, d;
double e;
a = 3;
b = 4;
c = 5;
d = 6;
e = a + (double) b / c * d;
System.out.println("e=" + e);
e = a + (((double) b) / c) * d; // Java: 7.8
System.out.println("e=" + e);
如果你在C中运行它,你会看到差异。
答案 1 :(得分:0)