Haskell:比较NaN值

jve*_*len 1 haskell nan

quickcheck为一个优化和评估函数的Haskell程序编写了测试.

问题是quickcheck生成表达式,结果NaN如下:

> acos(2)
NaN
Run Code Online (Sandbox Code Playgroud)

Haskell将以下语句评估为false:

> acos(2)==acos(2)
False
Run Code Online (Sandbox Code Playgroud)

所以我的quickcheck测试因这种比较而失败.有没有办法比较NaN价值观?

Hau*_*eth 7

不,如IEEE 754所定义,比较2 NaNs总是返回false.要知道你的值是否NaN在Haskell中,你可以使用isNaN方法或自己编写

isNaN' :: a -> Bool
isNaN' a = a /= a
Run Code Online (Sandbox Code Playgroud)

  • [SO](http://stackoverflow.com/questions/1565164/what-is-the-rationale-for-all-comparisons-returning-false-for-ieee754-nan-values/1573715# 1573715) 由 IEEE 委员会之一。我不会和你争论,而是阅读他写的东西。[this](http://stackoverflow.com/a/23666623/1017941) 也是该设计选择的良好理由。 (2认同)