C ++中对双精度值的较少相等检查

时间:2018-12-20 10:03:41

标签: c++ double decimal precision

假设我有两个函数f1和f2,它们返回一个double并获得相同的输入(对某种对象的const引用)。

这些函数的设计方式是给定输入x,

f1(x) <= f2(x) 

应始终保持。

在一组1000个输入实例上测试此断言时,一小部分实例失败。值得注意的是,在所有这些情况下,f1(x)都比f2(x)大一个小于     10 ^ -13。

以下代码示例是粗略的,但对于演示而言,它应该足够了:

const InputInstance x{...};
const double a{f1(x)};
const double b{f2(x)};
assert(a <= b);

在其他文件中,我声明了以下函数f1和f2:

const double f1(const InputInstance& x);
const double f2(const InputInstance& x);

以下代码

printf("FLT_RADIX = %d\n", FLT_RADIX);
printf("DBL_DIG = %d\n", DBL_DIG);
printf("DBL_MANT_DIG = %d\n", DBL_MANT_DIG);

打印:

FLT_RADIX = 2
DBL_DIG = 15
DBL_MANT_DIG = 53

在我的系统上。

据我正确理解,我可以预期输出加倍,直到第15位小数为止。对吧?

我应该避免在双打中使用'<='运算符吗?十三进制小数是我不知道的意思吗,还是应该停止抱怨并在代码中寻找错误;-)?

0 个答案:

没有答案