2009-11-23 1 views
7

Есть ли способ в Haskell получить константу, которая является наибольшим и наименьшим возможным положительным рациональным числом, большим нуля, которое может быть представлено двойниками?Haskell minimum/maximum Double Constant

+0

Действительно, оглядываясь назад, я понятия не имею, почему я хотел знать это ... – Claudiu

ответ

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: Я понимаю. Спасибо за объяснение. –

 Смежные вопросы

  • Нет связанных вопросов^_^