我已经将一个相对简单的算法从 C++ 转换为 Java,该算法对 double
类型的数字执行大量计算,但是在两个平台上运行该算法但同一台机器产生的结果略有不同结果。该算法对许多 double 和整数进行乘法和求和。我在 Java 算法中将 int 转换为 double; C 算法不强制转换。
例如,在一次运行中我得到了结果:
- (Java)64684970
- (C++) 65296408
(打印忽略小数位)
当然,我的算法可能存在错误,但是在我开始花时间调试之前,是否可以通过 C++ 和 Java 中不同的浮点处理来解释这种差异?如果是这样,我可以证明这是问题所在吗?
更新 - 类型不同的地方是两个整数之间的乘法,然后将其添加到运行总 double 中。 修改了C代码,目前在两者中:
mydouble += (double)int1 * (double)int2
最佳答案
您可以使用相同的精度为每个算法添加舍入。这将允许每个计算以相同的方式处理数据。如果您使用它,它将消除算法问题,因为对于 C++ 和 Java 版本,数据将在等式的每一步使用相同的精度
关于java - 如何确认不同的结果是否是由于 float 处理的差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9518844/