java - 生成病态数据以测试浮点求和

标签 java floating-point

我已经实现了 Kahan floating point summation algorithm在 java 。我想将它与 Java 中的内置浮点加法和 Mathematica 中的无限精度加法进行比较。然而,我拥有的数据集不适合测试,因为数字彼此接近。 (条件号~=1)

在我的数据集上运行 Kahan 给出的结果与内置 + 几乎相同。

有人可以建议如何生成可能导致严重舍入误差的大量数据吗?

最佳答案

However the data set I have is not good for testing, because the numbers are close to each other.

听起来你已经知道问题出在哪里了。开始吧 =)

您需要一些东西:

  • 数量级差异很大的数字,因此较小数字的大部分精度都会因简单求和而丢失。
  • 具有不同符号和几乎相等(或相等)大小的数字,从而导致灾难性抵消。
  • 设置了一些低位的数字,以增强舍入效果。

首先,您可以尝试一些简单的三项求和,这应该可以清楚地显示效果:

1.0 + 1.0e-20 - 1.0

通过简单求和进行评估,结果为0.0;显然不正确。您还可以查看以下形式的总和:

a0 + a1 + a2 + ... + an - b

其中 b 是简单计算的 a0 + ... + an 之和。

关于java - 生成病态数据以测试浮点求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6602363/

相关文章:

c++ - 长的有什么问题?为什么自动减1?

java - 如何在 Spring Boot 中自定义 JSON 响应?

java - Spring Batch 2.2.7 应用程序抛出 "Invalid column name"。非常简单的代码炸弹

java - 如何使用 apache httpClient 设置基本身份验证

java - 从一个类到另一个类使用 JTextField

java - 使用特定布局打印列和总计

c - float 舍入问题

c - 使用 lex 检测 float

c++ - "Moving"数字朝向另一个数字而不超过它 - 任何无分支版本?

java - 转换 NaN 值