在比较单元测试中的双打时,我试图提出一个很好的容忍度。
如果我允许一个固定的容差,正如我在这个网站上看到的(例如return abs(actual-expected) < 0.00001;
),由于浮点表示的性质,当数字非常大时,这经常会失败。
如果我在允许的错误百分比方面使用相对容差(例如return abs(actual-expected) < abs(actual * 0.001);
,对于小数字,这经常失败(对于非常小的数字,计算本身可能会引入舍入误差)。此外,它在某些范围内允许过多的容差(例如,比较2000 年和 2001 年将过去)。
我想知道是否有任何允许公差的标准算法适用于小数和大数。我应该尝试某种以 2 为底的对数容差来镜像浮点存储吗?我应该根据输入的大小采用混合方法吗?
由于这是在单元测试代码中,因此性能并不是一个重要因素。