Just throwing a idea that came to me while reading this discussion (hopefully
not duplicating something that was already suggested)...
We could introduce `FiniteFloat` and `FiniteDouble` types that would disallow
NaN and infinity. Computations creating NaN or infinity would trap with these
types, mimicking what happens with integers in Swift. Converting a `Double` to
`FiniteDouble` would be achieved through a `finiteValue` property like this:
var a = 1.0
var b = a.finiteValue!
where the `finiteValue` property returns a `FiniteDouble?` that is `nil` for
NaN or infinity values. The finite type variant can conform to Equatable with
no issue. The regular one that allows NaNs and infinity would then have less
pressure to conform to Equatable. Just request the finite value whenever you
need it:
dict[a.finiteValue!] = "a"
I understand that this goes a bit beyond solving the problem with comparison
which is caused by NaNs and not by infinity values. But it's quite easy to
explain what "finite" means and it follows how integers works. It also has the
interesting property of guarantying a finite value for APIs that needs that,
which I believe is more frequent than APIs that require only a non-NaN value.
Hence why I'm suggesting FiniteDouble and not NonNaNDouble.
--
Michel Fortin
https://michelf.ca
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution