Esiste un modo in Haskell per ottenere la costante che è il numero razionale positivo più grande e più piccolo possibile maggiore di zero che può essere rappresentato dai doppi?Haskell minimo/massimo Doppio costante
7
A
risposta
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 ha la funzione [floatRange][2]
:
floatRange :: a -> (Int, Int) Fonte
una funzione costante, restituendo i valori più alti e più bassi l'esponente può assumere
che dovrebbe essere quello che vuoi.
+1
Umm? 'Prelude.floatRange' funziona su tutte le istanze di' classe RealFloat', incluso 'Double'. – ephemient
+0
@ephemient: ho capito. Grazie per la spiegazione. –
Davvero, guardando indietro, non ho idea del perché volevo sapere questo ... – Claudiu