我quickcheck为一个优化和评估函数的Haskell程序编写了测试.
问题是quickcheck生成表达式,结果NaN如下:
> acos(2)
NaN
Haskell将以下语句评估为false:
> acos(2)==acos(2)
False
所以我的quickcheck测试因这种比较而失败.有没有办法比较NaN价值观?
不,如IEEE 754所定义,比较2 NaNs总是返回false.要知道你的值是否NaN在Haskell中,你可以使用isNaN方法或自己编写
isNaN' :: a -> Bool
isNaN' a = a /= a