Haskell RealFloat类型类有一个函数isIEEE,根据文档,它给出'如果参数是一个IEEE浮点数,则为True'(并且,可以想象,否则为False).
但是这里是isIEEEfor 的实现Float:
instance RealFloat Float where
...
isIEEE _ = True
Run Code Online (Sandbox Code Playgroud)
以下是实施Double:
instance RealFloat Double where
...
isIEEE _ = True
Run Code Online (Sandbox Code Playgroud)
如果isIEEE总是无条件的True,为什么要使用它?为什么要在Prelude中呢?
正如左下角和Koterpillar在评论中提到的那样,可以定义自己的RealFloat实例.这些定制浮动类型不一定必须遵循IEEE标准.
instance RealFloat MyFloat where
isIEEE _ = False
...
Run Code Online (Sandbox Code Playgroud)
此外,如果您的浮点类型不是IEEE,则允许所有RealFloat谓词返回False:
(...)函数是NaN,isInfinite,isDenormalized,isNegativeZero,isIEEE是使用IEEE标准表示的所有支持号.对于非IEEE浮点数,这些可能都返回false.