module Factory.Math.Implementations.Pi.BBP.Bellard(
series
) where
import Control.Arrow((&&&))
import qualified Factory.Math.Implementations.Pi.BBP.Series as Math.Implementations.Pi.BBP.Series
series :: Math.Implementations.Pi.BBP.Series.Series
series :: Series
series = MkSeries :: [Integer] -> (Int -> [Integer]) -> Rational -> Integer -> Series
Math.Implementations.Pi.BBP.Series.MkSeries {
numerators :: [Integer]
Math.Implementations.Pi.BBP.Series.numerators = ((Integer -> Integer) -> Integer -> Integer)
-> [Integer -> Integer] -> [Integer] -> [Integer]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (Integer -> Integer) -> Integer -> Integer
forall a b. (a -> b) -> a -> b
($) [Integer -> Integer
forall a. Num a => a -> a
negate, Integer -> Integer
forall a. Num a => a -> a
negate, Integer -> Integer
forall a. a -> a
id, Integer -> Integer
forall a. Num a => a -> a
negate, Integer -> Integer
forall a. Num a => a -> a
negate, Integer -> Integer
forall a. Num a => a -> a
negate, Integer -> Integer
forall a. a -> a
id] ([Integer] -> [Integer]) -> [Integer] -> [Integer]
forall a b. (a -> b) -> a -> b
$ (Integer -> Integer) -> [Integer] -> [Integer]
forall a b. (a -> b) -> [a] -> [b]
map (Integer
2 Integer -> Integer -> Integer
forall a b. (Num a, Integral b) => a -> b -> a
^) [Integer
5 :: Integer, Integer
0, Integer
8, Integer
6, Integer
2, Integer
2, Integer
0],
getDenominators :: Int -> [Integer]
Math.Implementations.Pi.BBP.Series.getDenominators = \Int
i -> let
f, t :: Integer
(Integer
f, Integer
t) = (Integer
4 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
*) (Integer -> Integer)
-> (Integer -> Integer) -> Integer -> (Integer, Integer)
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (Integer
10 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
*) (Integer -> (Integer, Integer)) -> Integer -> (Integer, Integer)
forall a b. (a -> b) -> a -> b
$ Int -> Integer
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
i
in [Integer
f Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
1, Integer
f Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
3, Integer
t Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
1, Integer
t Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
3, Integer
t Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
5, Integer
t Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
7, Integer
t Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+ Integer
9],
seriesScalingFactor :: Rational
Math.Implementations.Pi.BBP.Series.seriesScalingFactor = Rational -> Rational
forall a. Fractional a => a -> a
recip (Rational -> Rational) -> Rational -> Rational
forall a b. (a -> b) -> a -> b
$ Rational
2 Rational -> Int -> Rational
forall a b. (Num a, Integral b) => a -> b -> a
^ (Int
6 :: Int),
base :: Integer
Math.Implementations.Pi.BBP.Series.base = Integer -> Integer
forall a. Num a => a -> a
negate (Integer -> Integer) -> Integer -> Integer
forall a b. (a -> b) -> a -> b
$ Integer
2 Integer -> Int -> Integer
forall a b. (Num a, Integral b) => a -> b -> a
^ (Int
10 :: Int)
}