Safe Haskell  None 

Language  Haskell2010 
This module exports a bunch of utilities for working inside the CReal datatype. One should be careful to maintain the CReal invariant when using these functions
 newtype CReal n = CR (Int > Integer)
 atPrecision :: CReal n > Int > Integer
 crealPrecision :: KnownNat n => CReal n > Int
 expBounded :: CReal n > CReal n
 logBounded :: CReal n > CReal n
 atanBounded :: CReal n > CReal n
 sinBounded :: CReal n > CReal n
 cosBounded :: CReal n > CReal n
 shiftL :: CReal n > Int > CReal n
 shiftR :: CReal n > Int > CReal n
 powerSeries :: [Rational] > (Int > Int) > CReal n > CReal n
 alternateSign :: Num a => [a] > [a]
 (/.) :: Integer > Integer > Integer
 log2 :: Integer > Int
 log10 :: Integer > Int
 isqrt :: Integer > Integer
 showAtPrecision :: Int > CReal n > String
 decimalDigitsAtPrecision :: Int > Int
 rationalToDecimal :: Int > Rational > String
Documentation
The type CReal represents a fast binary Cauchy sequence. This is a Cauchy sequence with the invariant that the pth element will be within 2^p of the true value. Internally this sequence is represented as a function from Ints to Integers.
KnownNat n => Eq (CReal n) Source  Values of type

Floating (CReal n) Source  
Fractional (CReal n) Source  Taking the reciprocal of zero will not terminate 
Num (CReal n) Source 
This is a little bit of a fudge, but it's probably better than failing to terminate when trying to find the sign of zero. The class still respects the abssignum law though.

KnownNat n => Ord (CReal n) Source  Like equality values of type 
KnownNat n => Real (CReal n) Source 

KnownNat n => Show (CReal n) Source  A CReal with precision p is shown as a decimal number d such that d is within 2^p of the true value.

atPrecision :: CReal n > Int > Integer Source
x `atPrecision` p
returns the numerator of the pth element in the
Cauchy sequence represented by x. The denominator is 2^p.
>>>
10 `atPrecision` 10
10240
crealPrecision :: KnownNat n => CReal n > Int Source
crealPrecision x returns the type level parameter representing x's default precision.
>>>
crealPrecision (1 :: CReal 10)
10
expBounded :: CReal n > CReal n Source
The input to expBounded must be in the range (1..1)
logBounded :: CReal n > CReal n Source
The input must be in [1..2]
atanBounded :: CReal n > CReal n Source
The input to atanBounded must be in [1..1]
sinBounded :: CReal n > CReal n Source
The input to sinBounded must be in (1..1)
cosBounded :: CReal n > CReal n Source
The input to cosBounded must be in (1..1)
shiftL :: CReal n > Int > CReal n Source
x `shiftL` n
is equal to x
multiplied by 2^n
n
can be negative or zero
This can be faster than doing the multiplication
shiftR :: CReal n > Int > CReal n Source
x `shiftR` n
is equal to x
divided by 2^n
n
can be negative or zero
This can be faster than doing the division
powerSeries :: [Rational] > (Int > Int) > CReal n > CReal n Source
powerSeries q f x
will evaluate the power series with
coefficients atPrecision
pq
at precision f p
at x
f
should be a function such that the CReal invariant is maintained
See any of the trig functions for an example
alternateSign :: Num a => [a] > [a] Source
Apply negate
to every other element, starting with the second
>>>
alternateSign [1..5]
[1,2,3,4,5]
(/.) :: Integer > Integer > Integer infixl 7 Source
Division rounding to the nearest integer and rounding half integers to the nearest even integer.
showAtPrecision :: Int > CReal n > String Source
Return a string representing a decimal number within 2^p of the value
represented by the given CReal p
.
decimalDigitsAtPrecision :: Int > Int Source
How many decimal digits are required to represent a number to within 2^p
rationalToDecimal :: Int > Rational > String Source
rationalToDecimal p x
returns a string representing x
at p
decimal
places.