MiniTest的assert_in_delta和assert_in_epsilon方法有什么区别?

时间:2016-09-28 09:33:01

标签: ruby minitest approximate

以下是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,否则失败。

这些看起来很相似;究竟有什么区别?你何时会使用一种方法而不是另一种?

1 个答案:

答案 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.000003MiniTest。我们可以写下面的内容:

1,000

这在功能上等同于写作:

1,000,000