fix for comparing infinities (#16122)
This commit is contained in:
parent
57bd64582c
commit
e220f756e7
1 changed files with 11 additions and 0 deletions
|
|
@ -177,6 +177,17 @@ proc almostEqual*[T: SomeFloat](x, y: T; unitsInLastPlace: Natural = 4): bool {.
|
|||
runnableExamples:
|
||||
doAssert almostEqual(3.141592653589793, 3.1415926535897936)
|
||||
doAssert almostEqual(1.6777215e7'f32, 1.6777216e7'f32)
|
||||
doAssert almostEqual(Inf, Inf)
|
||||
doAssert almostEqual(-Inf, -Inf)
|
||||
doAssert almostEqual(Inf, -Inf) == false
|
||||
doAssert almostEqual(-Inf, Inf) == false
|
||||
doAssert almostEqual(Inf, NaN) == false
|
||||
doAssert almostEqual(NaN, NaN) == false
|
||||
|
||||
if x == y:
|
||||
# short circuit exact equality -- needed to catch two infinities of
|
||||
# the same sign. And perhaps speeds things up a bit sometimes.
|
||||
return true
|
||||
let diff = abs(x - y)
|
||||
result = diff <= epsilon(T) * abs(x + y) * T(unitsInLastPlace) or
|
||||
diff < minimumPositiveValue(T)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue