Как проверить, находятся ли два числа в пределах порога друг от друга? - PullRequest
0 голосов
/ 30 октября 2018

Мне нужно проверить, изменилась ли длина содержимого изображения. Однако есть изображения, которые колеблются в пределах 15 или 20 байтов. Поэтому я хочу сказать: «эти два изображения фактически одинаковы, если длина их содержимого не превышает 25 байт».

Допустим, у меня есть два числа: first и second, которые являются положительными целыми числами, и threshold, который также является положительным целым числом. Какой самый простой способ определить, находятся ли два числа в пределах порога друг друга?

Ответы [ 3 ]

0 голосов
/ 30 октября 2018

Будет ли это работать для вас?

def in_range(hi, lo, range)
  (hi-lo).abs <= range
end

in_range(5, 10, 3) #=> false
in_range(7, 10, 3) #=> true

И это довольно быстро, независимо от диапазона

puts Benchmark.measure{ 10_000.times{in_range(50_000, 1_000_000_000, 53000)} }
#=>0.000000   0.000000   0.000000 (  0.000936)
0 голосов
/ 30 октября 2018

Другой вариант, используя Enumerable # include :

(x1 - delta..x1 + delta).include? x2

Где x1 - первая точка, x2 - вторая точка, а delta - порог.

0 голосов
/ 30 октября 2018

Проверьте, находится ли их абсолютная разница в пороге,

(first - second).abs <= threshold

Или проверьте, находится ли их расстояние между -threshold..threshold, например:

(-threshold..threshold).cover?(first - second)

или около того:

(first - second).between?(-threshold, threshold)
...