2015-11-06 16 views
9

Haskell RealFloat typeclassには、documentationに従って、引数がIEEE浮動小数点数の場合はTrueを返します(そうでない場合はFalse)。isIEEEという関数があります。ここハスケルはいつもTrueと評価されていますか?

しかしはFloatためisIEEEの実装です:

instance RealFloat Float where 
    ... 
    isIEEE _ = True 

そして、ここではDoubleの実装です:

instance RealFloat Double where 
    ... 
    isIEEE _ = True 

isIEEEは常に無条件Trueであれば、なぜそれを使うのか?なぜプレリュードの中にあるのですか?

+11

GHCに付属しているだけで、 'RealFloat'インスタンスはIEEE754に従うためだけで、それはあなたにはない独自のインスタンスを定義することができないという意味ではありません。 – leftaroundabout

+0

@leftaroundabout待って、実際に独自の浮動小数点型を定義できますか? –

+7

@WanderNautaこれは、タイプをインスタンスとして持つことができる機能を提供できる限り、タイプメックのポイントです。 – Koterpillar

答えて

7

コメントに記載されているleftaroundaboutKoterpillarは、RealFloatの独自のインスタンスを定義することができます。これらのカスタムフロートタイプは、必ずしもIEEE規格に準拠する必要はありません。あなたの浮動小数点型がIEEEでない場合

instance RealFloat MyFloat where 
    isIEEE _ = False 
    ... 

また、あなたはすべてのRealFloat述語はFalseを返すように許可されています。

(...)関数ますisNaN、isInfinite、isDenormalized、 isNegativeZero、 isIEEEすべてのサポート番号はIEEE標準を使用して表されています。 IEEE以外の浮動小数点数の場合、これらはすべてfalseを返すことがあります。

Haskell 98 Report, 6.4.6

関連する問題