您如何检查两个数字是否在阈值之内?

时间:2018-10-30 02:54:04

标签: ruby integer comparison

我需要检查图像的内容长度是否已更改。但是,有些图像似乎在约15或20个字节内振荡。所以我想说:“如果这两个图像的内容长度在25个字节以内,则它们实际上是相同的。”

假设我有两个数字:firstsecond是正整数,而threshold也是正整数。确定两个数字是否在阈值之内的最简单方法是什么?

3 个答案:

答案 0 :(得分:2)

检查它们的绝对差是否在阈值内,

(first - second).abs <= threshold

或者检查它们之间的距离是否在-threshold..threshold之间,像这样:

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

等等:

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

答案 1 :(得分:2)

这对您有用吗?

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)

答案 2 :(得分:0)

其他选项,使用Enumerable#include

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

x1是第一个点,x2是第二个点,delta是阈值。