假设我有两个函数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位小数为止。对吧?
我应该避免在双打中使用'<='运算符吗?十三进制小数是我不知道的意思吗,还是应该停止抱怨并在代码中寻找错误;-)?