
On July 10, 2012 09:28:27 Christian Maeder wrote:
Am 10.07.2012 13:06, schrieb Sönke Hahn:
I've attached the code. The code does not make direct use of unsafePerformIO. It uses QuickCheck, but I don't think, this is a QuickCheck bug. The used Eq-instance is the one for Float.
The Eq-instance for floats is broken wrt NaN
Prelude> (0/0 :: Float) == 0/0 False
I do not know if you create NaN in your tests, though.
Would that really be broken though? NaN can arrise from many contexts (e.g., sqrt(-1)), so it would also not make much sense to return True. The IEEE standard actually defines a mutually exclusive fourth "unordered" state wrt to NaNs for comparisons (in addition to lesser, greater, and equal). I would like to suggest native floating point might be better modelled as "Maybe Float", with NaN being the builtin "Nothing", but leaves out Inf. Cheers! -Tyson