2016-09-28 85 views
2

这里是documentation for assert_in_deltaMiniTest的assert_in_delta和assert_in_epsilon方法有什么区别?

assert_in_delta(exp, act, delta = 0.001, msg = nil) public 

为了比较浮动。除非exp和act在彼此的三角内,否则失败。

assert_in_delta Math::PI, (22.0/7.0), 0.01 

这里是documentation for assert_in_epsilon

assert_in_epsilon(a, b, epsilon = 0.001, msg = nil) public 

为了比较浮动。除非exp和act具有小于epsilon的相对误差,否则失败。

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

回答

4

的主要区别是:

  • 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...,小于的0.01允许delta


(来自wikipedia

assert_in_epsilon经常被用来比较大相径庭大小的数的近似值。

例如,近似数1,0003的绝对误差,在大多数应用中,比具有3的绝对误差近似数量1,000,000差得多;在第一种情况下,相对误差为0.003,第二种情况下仅为0.000003

要写入本实施例中在MiniTest,假设我们有一个我们要检查两个值的阵列是“近似等于”分别1,0001,000,000。我们可以写:

# Using the default `epsilon` of 0.001 
assert_in_epsilon(1_000, actual[0]) 
assert_in_epsilon(1_000_000, actual[1]) 

这在功能上等同于书写:

assert_in_delta(1_000, actual[0], 1) 
assert_in_delta(1_000_000, actual[1], 1000)