2009-11-23 65 views
7

Haskell有沒有什麼方法可以獲得常量,即可以用雙精度表示的大於零的最大和最小可能的正有理數?Haskell最小/最大雙常數

+0

真的,回頭看,我不知道爲什麼我想知道這個... – Claudiu 2014-06-21 13:57:44

回答

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]

floatRange ::一個 - >(INT,INT)來源

常數函數,返回的最低和最高值的指數可以假設

這應該是你想要的。

+1

嗯? 'Prelude.floatRange'適用於'class RealFloat'的所有實例,包括'Double'。 – ephemient 2009-11-23 01:40:13

+0

@ephemient:我明白。感謝您的解釋。 – 2009-11-23 02:44:53