/ / Каква е разликата между методите assert_in_delta и assert_in_epsilon на MiniTest? - рубин, министест, приблизително

Каква е разликата между методите assert_in_delta и assert_in_epsilon на MiniTest? - рубин, министест, приблизително

Ето го документация за assert_in_delta:

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

За сравняване на плувки. Неуспех, освен ако екс и действието са в делта на един друг.

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 нямат относителна грешка по-малка от epsilon.

Те изглеждат много сходни; какво точно е разликата? Кога бихте използвали един метод над другия?

Отговори:

5 за отговор № 1

Основната разлика е:

  • assert_in_delta е за абсолютен грешки.
  • assert_in_epsilon е за относителен грешки.

Това са два различни вида грешка при сближаване:

Абсолютната грешка е величината на разликата между точната стойност и сближаването.

Относителната грешка е абсолютната грешка, разделена на величината на точната стойност.


assert_in_delta е най-лесната за разбиране и най-често се използва при тестове.

В примера на документацията: assert_in_delta Math::PI, (22.0 / 7.0), 0.01, това твърдение ще бъде минавам защото 22.0/7 - Math::PI == 0.001264..., което е по-малко от позволеното delta на 0.01.


(От Уикипедия)

assert_in_epsilon често се използва за сравняване на приблизителните числа на диво размерите.

Например, приближете числото 1,000 с абсолютна грешка от 3 е в повечето приложения много по-лошо от приближаването на числото 1,000,000 с абсолютна грешка от 3; в първия случай относителната грешка е 0.003 и във втория е само 0.000003.

За да напишете този пример в MiniTest, предполагаме, че имаме масив от две стойности, които искаме да проверим, са "приблизително равни на" 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)