2009-11-23 26 views
7

ハスケルで倍精度で表現できる0より大きい可能な最大かつ最小の正の有理数を得る方法はありますか? - >(INT、INT)出典ハスケルの最小/最大倍精度

定数関数、最低と最高値を返す指数は

をとることができる

なfloatRange :::

+0

本当に、振り返ってみると、私はなぜこれを知りたかったのかわかりません... – Claudiu

答えて

7
maxNonInfiniteFloat :: RealFloat a => a -> a 
maxNonInfiniteFloat a = encodeFloat m n where 
    b = floatRadix a 
    e = floatDigits a 
    (_, e') = floatRange a 
    m = b^e - 1 
    n = e' - e 

minPositiveFloat :: RealFloat a => a -> a 
minPositiveFloat a = encodeFloat 1 $ fst (floatRange a) - floatDigits a 
2

GHC.Float

は機能 [floatRange][2]を持っています

これはあなたが望むものでなければなりません。

+1

うん? 'Prelude.floatRange'は' RealFloat'クラスのすべてのインスタンスで動作します。これには 'Double'も含まれます。 – ephemient

+0

@ephemient:わかっています。説明ありがとう。 –

関連する問題