java - 如何确认不同的结果是否是由于 float 处理的差异?

标签 java c++ floating-point

我已经将一个相对简单的算法从 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/

相关文章:

java - 确定打印机是物理打印机还是虚拟打印机的便携方法

java - 哪种数据结构更适合使用顺序搜索来搜索元素 - 数组列表还是链接列表?

c++ - 运算符重载错误

python - 为浮点值保持相同的格式

java - 在具有潜在多语言需求的数据库中定义 "types"的最佳实践设计模式?

java - 下面的泛型代码有什么作用?

c++ - 我在 C++ 中使用 vector 的冒泡排序代码

c++ - 我有两个 GPU,我怎么能只让其中一个执行特定的 CUDA 任务呢?

unsigned->float 转换的 C 舍入,其中 src 与其向上舍入值或向下舍入值的距离相等?

c - C 中小于 1 的舍入值?