2009-11-23 41 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