Haskell RealFloat
类型类有一个名为isIEEE
的函数,根据documentation,如果参数是IEEE浮点数,则给出'True(并且,可以想象) ,否则为假。)
但这是isIEEE
的{{1}}的实施:
Float
这是instance RealFloat Float where
...
isIEEE _ = True
的实现:
Double
如果instance RealFloat Double where
...
isIEEE _ = True
总是无条件地isIEEE
,为什么要使用它?为什么要在Prelude中呢?
答案 0 :(得分:7)
在评论中提及leftaroundabout和Koterpillar时,可以定义自己的RealFloat实例。这些定制浮动类型不一定必须遵循IEEE标准。
instance RealFloat MyFloat where
isIEEE _ = False
...
此外,如果您的浮点类型不是IEEE,则允许所有RealFloat谓词返回False:
(...)函数是NaN,isInfinite,isDenormalized,isNegativeZero,和 isIEEE使用IEEE标准表示的所有支持号码。对于 非IEEE浮点数,这些都可能都返回false。