2009-11-23 10 views
7

Gibt es einen Weg in Haskell, um die Konstante zu erhalten, die die größte und kleinste mögliche positive rationale Zahl größer als Null ist, die durch Doppel repräsentiert werden kann?Haskell Minimum/Maximum Double Constant

+0

Wahrlich, im Rückblick habe ich keine Ahnung, warum ich das wissen wollte ... – Claudiu

Antwort

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 hat die Funktion [floatRange][2]:

floatRange :: a -> (Int, Int) Quelle

eine konstante Funktion, kann die niedrigsten und höchsten Werte der Exponent Rückkehr

nehmen

was sollte was du willst.

+1

Umm? 'Prelude.floatRange' funktioniert bei allen Instanzen der Klasse RealFloat, einschließlich' Double'. – ephemient

+0

@ephemient: Ich verstehe. Danke für die Erklärung. –