【发布时间】:2011-06-14 19:12:25
【问题描述】:
我正在运行 NUnit 测试来评估一些已知的测试数据和计算结果。这些数字是浮点双精度数,所以我不希望它们完全相等,但我不确定如何在给定的精度下将它们视为相等。
在 NUnit 中,我们可以与固定容差进行比较:
double expected = 0.389842845321551d;
double actual = 0.38984284532155145d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
这对于零以下的数字效果很好,但随着数字的增长,容差确实需要改变,所以我们总是关心相同的精度位数。
具体来说,这个测试失败了:
double expected = 1.95346834136148d;
double actual = 1.9534683413614817d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
当然更大的数字会因公差而失败..
double expected = 1632.4587642911599d;
double actual = 1632.4587642911633d; // really comes from a data import
Expect(actual, EqualTo(expected).Within(0.000000000000001));
评估两个浮点数在给定精度下相等的正确方法是什么?在 NUnit 中是否有内置方法可以做到这一点?
【问题讨论】:
标签: c# nunit floating-point