为什么这个方程在 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。
更新:
抱歉各位,这个错误似乎超出了我的预期。我将代码简化为这个方程式,并且它产生的数字更接近。
最佳答案
在 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 语言中运行它,您将看到差异。
关于java - C 与 Java 原始转换和表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424213/