以下是documentation for assert_in_delta
:
assert_in_delta Math::PI, (22.0 / 7.0), 0.01
用于比较Floats。除非exp和act在彼此的delta之内,否则失败。
assert_in_epsilon(a, b, epsilon = 0.001, msg = nil) public
这是documentation for assert_in_epsilon
{{1}}用于比较Floats。除非exp和act的相对误差小于epsilon,否则失败。
这些看起来很相似;究竟有什么区别?你何时会使用一种方法而不是另一种?
答案 0 :(得分:6)
关键区别是:
assert_in_delta
用于绝对错误。assert_in_epsilon
用于相对错误。这是两种不同类型的approximation error:
绝对误差是精确值与近似值之差的大小。
相对误差是绝对误差除以精确值的大小。
assert_in_delta
最容易理解,最常用于测试。
在文档的示例中:assert_in_delta Math::PI, (22.0 / 7.0), 0.01
,此断言将传递,因为22.0/7 - Math::PI == 0.001264...
小于delta
的{{1}}。
(来自wikipedia)
0.01
通常用于比较大小不同的数字的近似值。
例如,在大多数应用中,使用绝对误差assert_in_epsilon
逼近数字1,000
比使用绝对误差{{1}逼近数字3
要差得多};在第一种情况下,相对误差为1,000,000
,而在第二种情况下,相对误差仅为3
。
要在0.003
中编写此示例,假设我们要检查的两个值的数组分别“大约等于”0.000003
和MiniTest
。我们可以写下面的内容:
1,000
这在功能上等同于写作:
1,000,000