Actions
Feature #10425
openA predicate method to tell if a number is near another
Status:
Open
Assignee:
-
Target version:
-
Description
A method near?
like the following would be useful.
class Numeric
def near? other, delta: Float::EPSILON
(other.to_f - to_f).abs <= delta.to_f
end
end
class Time
def near? other, delta: Float::EPSILON
to_f.near?(other.to_f, delta: delta)
end
end
It can be used to check errors, or whether something is around something.
23.24324.near?(23.23, delta: 0.5) # => true
t1 = t2 = Time.now
t3 = Time.now
t1.near?(t2) #=> true
t1.near?(t3) #=> false
5.near?(3, delta: 1) #=> true
Some testing frameworks have something similar to this, but I think this is an elementary concept that Ruby should support at it core.
Updated by sawa (Tsuyoshi Sawada) about 10 years ago
The definition above is just to illustrate the functions. There may be a better implementation. Especially, an appropriate error message should be given when an inappropriate argument is given.
error
might be a better name to replace the named parameter delta
. I am not sure.
Updated by duerst (Martin Dürst) about 10 years ago
Such a predicate would indeed be convenient. But sometimes, one doesn't want to compare with an absolute epsilon, but relatively, e.g. like so:
((other.abs.to_f + abs.to_f) / (other.to_f - to_f).abs)
<= ????
Updated by mame (Yusuke Endoh) over 5 years ago
- Related to Feature #15811: Propsing new method for comparing equality of 2 (float) numbers relatively added
Actions
Like0
Like0Like0Like0