2016-09-28 20 views
2

はここdocumentation for assert_in_deltaです:フロートを比較するためのMiniTestの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の相対誤差がε未満でない限り失敗します。

これらは非常によく似ています。違いは何ですか?いつ他の方法よりも1つの方法を使用しますか?

答えて

4

重要な違いがある:

  • assert_in_delta絶対エラーのためのものです。
  • assert_in_epsilonです。エラーです。

    絶対誤差は正確な値と近似値との差の大きさで:

これらはapproximation errorの二つの異なるタイプがあります。

相対誤差は、絶対誤差を正確な値の絶対値で割ったものです。


assert_in_delta理解するのが最も簡単で、最も一般的にテストで使用されます。ドキュメントの例では

assert_in_delta Math::PI, (22.0/7.0), 0.01、この主張は0.01の許可delta未満のパス22.0/7 - Math::PI == 0.001264...ので、意志。


wikipediaから)

assert_in_epsilonはしばしば乱暴に異なる大きさの数の近似値を比較するために使用されます。

例えば、3の絶対誤差で数1,000を近似することは、ほとんどのアプリケーションにおいて、3の絶対誤差で数1,000,000を近似するよりもはるかに悪いです。最初の場合、相対誤差は0.003であり、2番目の誤差は0.000003です。

MiniTestにこの例を書き込むには、チェックしたい2つの値の配列がそれぞれ「ほぼ等しい」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) 
関連する問題