Есть ли способ в Haskell получить константу, которая является наибольшим и наименьшим возможным положительным рациональным числом, большим нуля, которое может быть представлено двойниками?Haskell minimum/maximum Double Constant
7
A
ответ
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
Umm? 'Prelude.floatRange' работает во всех экземплярах класса RealFloat, включая' Double'. – ephemient
+0
@emhemient: Я понимаю. Спасибо за объяснение. –
Действительно, оглядываясь назад, я понятия не имею, почему я хотел знать это ... – Claudiu