Make NaN equal NaN
This commit is contained in:
parent
75916ea0dd
commit
cf5efb7d86
|
@ -1,7 +1,7 @@
|
||||||
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
# SPDX-FileCopyrightText: ☭ Emery Hemingway
|
||||||
# SPDX-License-Identifier: Unlicense
|
# SPDX-License-Identifier: Unlicense
|
||||||
|
|
||||||
import std/[hashes, options, sets, sequtils, tables]
|
import std/[hashes, math, options, sets, sequtils, tables]
|
||||||
|
|
||||||
import bigints
|
import bigints
|
||||||
|
|
||||||
|
@ -56,6 +56,11 @@ type
|
||||||
|
|
||||||
DictEntry*[E] = tuple[key: Preserve[E], val: Preserve[E]]
|
DictEntry*[E] = tuple[key: Preserve[E], val: Preserve[E]]
|
||||||
|
|
||||||
|
func `===`[T: SomeFloat](a, b: T): bool =
|
||||||
|
## Compare where Nan == NaN.
|
||||||
|
let class = a.classify
|
||||||
|
(class == b.classify) and ((class notin {fcNormal,fcSubnormal}) or (a == b))
|
||||||
|
|
||||||
func `==`*[A, B](x: Preserve[A]; y: Preserve[B]): bool =
|
func `==`*[A, B](x: Preserve[A]; y: Preserve[B]): bool =
|
||||||
## Check `x` and `y` for equivalence.
|
## Check `x` and `y` for equivalence.
|
||||||
if x.kind == y.kind and x.embedded == y.embedded:
|
if x.kind == y.kind and x.embedded == y.embedded:
|
||||||
|
@ -63,9 +68,9 @@ func `==`*[A, B](x: Preserve[A]; y: Preserve[B]): bool =
|
||||||
of pkBoolean:
|
of pkBoolean:
|
||||||
result = x.bool == y.bool
|
result = x.bool == y.bool
|
||||||
of pkFloat:
|
of pkFloat:
|
||||||
result = x.float == y.float
|
result = x.float === y.float
|
||||||
of pkDouble:
|
of pkDouble:
|
||||||
result = x.double == y.double
|
result = x.double === y.double
|
||||||
of pkRegister:
|
of pkRegister:
|
||||||
result = x.register == y.register
|
result = x.register == y.register
|
||||||
of pkBigInt:
|
of pkBigInt:
|
||||||
|
|
Loading…
Reference in New Issue