testing - 什么是好的经验法则浮点比较方法选择器?

标签 testing floating-point comparison precision idioms

我正在测试一些代码,一些涉及使用浮点值进行计算的数字 - 通常是非常大的数字。我有一些通用的(C++ 模板化的,但对于这个问题来说并不重要)代码将我的输出(无论是标量还是数组)与它们的预期值进行比较。

我面临着选择精度阈值的问题,至少对于两种 C/C++ 浮点类型 floatdouble - 对于各种函数我正在测试。原样well known ,就比较浮点值而言,没有一刀切的方法,也没有仅基于数据类型的适合和计算的单一精度值:相对误差与绝对误差,可能会放大 float 的众多操作舍入误差很大,计算结果应该为 0,因此您无法真正按预期值归一化,等等。

为浮点值选择比较方法(和相等阈值)的一般合理方法/算法/经验法则是什么?

最佳答案

我喜欢 googletest 中使用的方法,例如EXPECT_DOUBLE_EQ(a,b) 和 EXPECT_FLOAT_EQ(a,b):如果它们在最后位置(4 ULP)的 4 个单位以内,则数字大致相等。为此,您

  1. 将符号幅度转换为偏移量
  2. 像整数一样减去
  3. 检查差异 <= 4。

这会自动缩放幅度并放松到绝对接近零。

关于testing - 什么是好的经验法则浮点比较方法选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37071066/

相关文章:

html - TestCafe - 如何在失败时获取元素的 html 输出

ruby - 根据要求使用特定的 VCR 磁带

math - float 学有问题吗?

python - 为什么/什么时候在 Python 中 `x==y` 调用 `y.__eq__(x)` ?

python - 比较两个不同的 python 计数器对象

java - 是否可以在 selenium 测试中访问 java bean?

java - PowerMock:如何取消模拟一个方法?

php - 在 PHP 中将值数组转换为单个浮点值?

c# - 如何将浮点表示与不连续函数结合起来?

android - MOTODEV Studio 对比 Android 谷歌插件