Как сравнить поплавки с дельтой? - PullRequest
8 голосов
/ 27 октября 2008

Есть ли в Ruby какая-то функциональность / синтаксис для сравнения двух чисел с дельтой? Нечто похожее на assert_in_delta (ожидаемый_флот, фактический_флоат, дельта) из тест / единица , но с возвращением логического значения?

Ответы [ 3 ]

18 голосов
/ 27 октября 2008
(expected_float - actual_float).abs <= delta
1 голос
/ 22 июля 2015

В зависимости от вашего приложения и того, что на самом деле представляют значения с плавающей запятой, может иметь смысл преобразовать их в Rationals с заданной точностью. Тогда прямые сравнения всегда будут вести себя корректно, поскольку Rational - это просто два целых числа.

Например, если вы знаете, что имеете дело с суммами в валюте США, сохранение их как amount.to_r.round(2) позволяет проводить точные сравнения на равенство.

Просто мысль ... не все нецелые значения должны быть неточно представленными числами с плавающей точкой

0 голосов
/ 27 октября 2008

Вам также может понадобиться расчет относительного допуска / дельты

http://realtimecollisiondetection.net/blog/?p=89

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...