module Factory.Math.Implementations.Pi.Spigot.Gosper(
series
) where
import qualified Factory.Math.Implementations.Pi.Spigot.Series as Math.Implementations.Pi.Spigot.Series
import qualified Factory.Math.Precision as Math.Precision
series :: Integral i => Math.Implementations.Pi.Spigot.Series.Series i
series :: Series i
series = MkSeries :: forall i.
[i] -> [i] -> [i] -> (DecimalDigits -> DecimalDigits) -> Series i
Math.Implementations.Pi.Spigot.Series.MkSeries {
baseNumerators :: [i]
Math.Implementations.Pi.Spigot.Series.baseNumerators = (i -> i) -> [i] -> [i]
forall a b. (a -> b) -> [a] -> [b]
map (\i
i -> i
i i -> i -> i
forall a. Num a => a -> a -> a
* i -> i
forall a. Enum a => a -> a
pred (i
2 i -> i -> i
forall a. Num a => a -> a -> a
* i
i)) [i
1 ..],
baseDenominators :: [i]
Math.Implementations.Pi.Spigot.Series.baseDenominators = (i -> i) -> [i] -> [i]
forall a b. (a -> b) -> [a] -> [b]
map ((i -> i -> i
forall a. Num a => a -> a -> a
* i
3) (i -> i) -> (i -> i) -> i -> i
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (\i
i -> i -> i
forall a. Enum a => a -> a
succ i
i i -> i -> i
forall a. Num a => a -> a -> a
* (i
i i -> i -> i
forall a. Num a => a -> a -> a
+ i
2))) [i
3, i
6 ..],
coefficients :: [i]
Math.Implementations.Pi.Spigot.Series.coefficients = [i
3, i
8 ..],
nTerms :: DecimalDigits -> DecimalDigits
Math.Implementations.Pi.Spigot.Series.nTerms = ConvergenceRate -> DecimalDigits -> DecimalDigits
forall i. Integral i => ConvergenceRate -> DecimalDigits -> i
Math.Precision.getTermsRequired (ConvergenceRate -> DecimalDigits -> DecimalDigits)
-> ConvergenceRate -> DecimalDigits -> DecimalDigits
forall a b. (a -> b) -> a -> b
$ ConvergenceRate
1 ConvergenceRate -> ConvergenceRate -> ConvergenceRate
forall a. Fractional a => a -> a -> a
/ ConvergenceRate
13
}