\section[PrelNumExtra]{Module @PrelNumExtra@}
\begin{code}
+{-# OPTIONS -fno-cpr-analyse #-}
{-# OPTIONS -fno-implicit-prelude #-}
{-# OPTIONS -H20m #-}
import PrelArr ( Array, array, (!) )
import PrelIOBase ( unsafePerformIO )
import PrelCCall () -- we need the definitions of CCallable and
- -- CReturnable for the _ccall_s herein.
+ -- CReturnable for the foreign calls herein.
\end{code}
%*********************************************************
signum x | x == 0.0 = 0
| x > 0.0 = 1
| otherwise = negate 1
+
+ {-# INLINE fromInteger #-}
fromInteger n = encodeFloat n 0
+ -- It's important that encodeFloat inlines here, and that
+ -- fromInteger in turn inlines,
+ -- so that if fromInteger is applied to an (S# i) the right thing happens
+
+ {-# INLINE fromInt #-}
fromInt i = int2Float i
instance Real Float where
foreign import ccall "__int_encodeFloat" unsafe
int_encodeFloat# :: Int# -> Int -> Float
+
foreign import ccall "isFloatNaN" unsafe isFloatNaN :: Float -> Int
foreign import ccall "isFloatInfinite" unsafe isFloatInfinite :: Float -> Int
foreign import ccall "isFloatDenormalized" unsafe isFloatDenormalized :: Float -> Int
signum x | x == 0.0 = 0
| x > 0.0 = 1
| otherwise = negate 1
+
+ {-# INLINE fromInteger #-}
+ -- See comments with Num Float
fromInteger n = encodeFloat n 0
fromInt (I# n#) = case (int2Double# n#) of { d# -> D# d# }
s@(h:t) = show ((round (r * 10^n))::Integer)
e = e0+1
+#ifdef USE_REPORT_PRELUDE
+ takeN n ls rs = take n ls ++ rs
+#else
takeN (I# n#) ls rs = takeUInt_append n# ls rs
+#endif
drop0 :: String -> String -> String
drop0 [] rs = rs
FFExponent ->
case decs of
Nothing ->
- let e' = if e==0 then 0 else e-1 in
- (case ds of
- [d] -> d : ".0e"
- (d:ds') -> d : '.' : ds' ++ "e") ++ show e'
+ let show_e' = show (e-1) in
+ case ds of
+ "0" -> "0.0e0"
+ [d] -> d : ".0e" ++ show_e'
+ (d:ds') -> d : '.' : ds' ++ "e" ++ show_e'
Just dec ->
let dec' = max dec 1 in
case is of