8

のドキュメントはassert_in_delta次のとおりです。

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

フロートの比較用。exp と act が互いのデルタ内にない場合は失敗します。

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

そして、ここにドキュメントがありますassert_in_epsilon

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

フロートの比較用。exp と act の相対誤差がイプシロン未満でない限り、失敗します。

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

4

1 に答える 1

7

主な違いは次のとおりです。

  • assert_in_delta絶対誤差用です。
  • assert_in_epsilon相対誤差です。

これらは、2 つの異なるタイプの近似誤差です。

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

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


assert_in_delta最も理解しやすく、テストで最も一般的に使用されます。

ドキュメントの例:assert_in_delta Math::PI, (22.0 / 7.0), 0.01では、このアサーションは、許可されている よりも小さいため、合格します。22.0/7 - Math::PI == 0.001264...delta0.01


(ウィキペディアより)

assert_in_epsilon大きく異なるサイズの数の近似値を比較するためによく使用されます。

たとえば、ほとんどのアプリケーションでは、1,000絶対誤差がの数値を概算することは、絶対誤差が 最初のケースでは相対誤差はであり、2 番目のケースでは のみです。31,000,00030.0030.000003

この例を に書くためにMiniTest、チェックしたい 2 つの値の配列がそれぞれ「ほぼ等しい」1,000であるとし1,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)
于 2016-09-28T09:33:01.243 に答える