úÎ!)8%†,      !"#$%&'()*+Safe› exp-extendedCache of useful magic values. exp-extendedbase , exp-extendedbase - exp-extendedbase . . / exp-extendedbase 0 . / exp-extendedmagic for overflow checks G(finite :: a) && supExponent <= e ==> maxExponent < exponent finite + e exp-extendedmagic for underflow checks G(finite :: a) && e <= infExponent ==> exponent finite + e < minExponent exp-extended radix-aware 1  exp-extended radix-aware 2  exp-extended radix-aware 3  exp-extended$smaller than this exponent and base 4 is 1  exp-extended$larger than this exponent and base 4 overflows to inf or 0  exp-extended(smaller than this exponent and extended 4 is 1 exp-extended(larger than this exponent and extended 4 overflows to inf or 0 exp-extendedbase 5 . 6 . , exp-extendedbase 6 . , exp-extended%Calculate the magic values at a type. exp-extendedMaximum exponent.DAs big as possible without requiring more expensive overflow checks. exp-extendedMinimum exponent.FAs small as possible without requiring more expensive overflow checks.  SafeHV%*  exp-extended9Extend floating point types with a larger exponent range.!Implementors need only implement:the ( data type, isomorphic to a strict pair (a, 7)its constructor its destructor 3Using a data family allows the UNPACK optimisation. exp-extendedAssociated data. Instances: 8, 9, :, ;, <, =, >, ?, @, A, B exp-extended*Deconstruct into basic value and exponent. exp-extendedVConstruct from a basic value and an exponent, without checking the invariant. Use  instead. exp-extendedHCache of magic values. Stored once per instance to avoid recomputation. exp-extendedmConstruct from a basic value and an exponent, ensuring that the result establishes the internal invariant: Fm == significand m && ((m == 0 || isInfinite m || isNaN m) ==> e == 0)9Also handles overflow to infinity, and underflow to zero. exp-extendedDDoes the extended value fit in the base type without over/underflow? exp-extendedUScale to the base type (possibly overflowing to infinity or underflowing to zero). exp-extended5Extend the exponent range while preserving the value. !expExtended' x == expExtended x 0  C      !"#$%&'()*+,-./0./1.23./4.25.67.68.69./:./;.<=>?@.AB>CD./E.FG.<H>CI.JK.FL./M.FN.OPQ'exp-extended-0.2-1cox226aaikDaXs19Sc52WNumeric.ExpExtended.InternalNumeric.ExpExtendedCachecRadixcDigits cRangeMin cRangeMax cSupExponent cInfExponentcUpShift cDownShift cRadixPowercExpMincExpMaxcExpInfcExpSup cLogRadixcRadix' cacheDefault maxExponent minExponentEDoubleEFloat ExpExtendable ExpExtendedwithExpExtendedunsafeExpExtendedcache expExtendedunExpExtendable unExpExtended expExtended'$fEnumExpExtended$fRealFloatExpExtended$fFloatingExpExtended$fRealFracExpExtended$fRealExpExtended$fFractionalExpExtended$fNumExpExtended$fOrdExpExtended$fEqExpExtended$fReadExpExtended$fShowExpExtended$fExpExtendableDouble$fExpExtendableFloatbase GHC.Float floatRadix floatDigits Data.Tuplefst floatRangesnd Data.BitsshiftLshiftRbitexplogGHC.Num fromIntegerghc-prim GHC.TypesIntGHC.EnumEnum GHC.ClassesEqFloatingGHC.Real FractionalNumOrdGHC.ReadReadReal RealFloatRealFracGHC.ShowShow