【发布时间】:2015-01-23 17:51:43
【问题描述】:
我正在尝试用 Java 实现一个 JS 函数。我几乎逐字复制了代码,因为两者都对浮点/双精度类型使用 64 位浮点,而对数学运算符(http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html 和 https://msdn.microsoft.com/en-us/library/ie/z3ks45k7(v=vs.94).aspx)使用相同的运算符优先级。但是,我在调试时发现两者之间的结果有所不同。具体来说,JavaScript 中的这一行:
var mu = M / (this.a * (1 - esq * (1 / 4 + esq * (3 / 64 + 5 * esq / 256))));
及其 Java 等价物:
Double mu = M / (a * (1 - esq * (1 / 4 + esq * (3 / 64 + 5 * esq / 256))));
具有以下值:
M=4373246.298519407, esq=0.006694379989312105, a=6378137.0
结果分别为 0.6856620239020387 和 0.6868129133457879。有人可以解释一下并给出正确的 Java 代码吗?这种不准确性正在转化为函数最终输出的巨大差异
【问题讨论】:
标签: java javascript math floating-point operator-precedence