Haskell中最小/最大的双精度浮点数常量

9

在Haskell中有没有办法获取可以用双精度浮点数表示的最大和最小正有理数常量?


1
回头看,我真的不知道为什么我想知道这个... - Claudiu
2个回答

9
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

1

GHC.Float有一个叫做[floatRange][2]的函数:

floatRange :: a -> (Int, Int) 来源

一个常量函数,返回指数可以取的最低值和最高值

这应该是你想要的。


1
嗯?Prelude.floatRange适用于所有class RealFloat的实例,包括Double - ephemient

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接