Almkvist-Giullera formula for pi: Difference between revisions

Content added Content deleted
m (→‎{{header|Haskell}}: Fix names.)
Line 595: Line 595:
powInteger b e = b `timesInteger` powInteger b (e `minusInteger` 1)
powInteger b e = b `timesInteger` powInteger b (e `minusInteger` 1)


-- The integral part of the Nth term in the Almkvist-Giullera series
-- The almkvistGiulleraIntegral part of the Nth term in the Almkvist-Giullera series
integral :: Integer -> Integer
almkvistGiulleraIntegral :: Integer -> Integer
almkvistGiulleraIntegral n =
integral n =
let polynomial = (532 `timesInteger` n `timesInteger` n) `plusInteger` (126 `timesInteger` n) `plusInteger` 9
let polynomial = (532 `timesInteger` n `timesInteger` n) `plusInteger` (126 `timesInteger` n) `plusInteger` 9
numerator = 32 `timesInteger` (facInteger (6 `timesInteger` n)) `timesInteger` polynomial
numerator = 32 `timesInteger` (facInteger (6 `timesInteger` n)) `timesInteger` polynomial
Line 608: Line 608:


-- The Nth term in the series
-- The Nth term in the series
almkvist'giullera :: Integer -> CReal
almkvistGiullera :: Integer -> CReal
almkvist'giullera n = fromInteger (integral n) / fromInteger (powInteger 10 (abs (tenExponent n)))
almkvistGiullera n = fromInteger (almkvistGiulleraIntegral n) / fromInteger (powInteger 10 (abs (tenExponent n)))


-- The sum of the first N terms
-- The sum of the first N terms
a'g_sum :: Integer -> CReal
almkvistGiulleraSum :: Integer -> CReal
a'g_sum n = sum $ map almkvist'giullera [0 .. n]
almkvistGiulleraSum n = sum $ map almkvistGiullera [0 .. n]


-- The approximation of pi from the first N terms
-- The approximation of pi from the first N terms
a'g_pi :: Integer -> CReal
almkvistGiulleraPi :: Integer -> CReal
a'g_pi n = sqrt $ 1 / a'g_sum n
almkvistGiulleraPi n = sqrt $ 1 / almkvistGiulleraSum n




Line 624: Line 624:
main = do
main = do
(printf "N. %44s %4s %s\n" "Integral part of Nth term" "×10^" "=Actual value of Nth term")
(printf "N. %44s %4s %s\n" "Integral part of Nth term" "×10^" "=Actual value of Nth term")
mapM_ (\n -> printf "%d. %44d %4d %s\n" n (integral n) (tenExponent n) (showCReal 50 (almkvist'giullera n))) [0..9]
mapM_ (\n -> printf "%d. %44d %4d %s\n" n (almkvistGiulleraIntegral n) (tenExponent n) (showCReal 50 (almkvistGiullera n))) [0..9]
printf "\nPi after %d iterations:\n" iterations
printf "\nPi after %d iterations:\n" iterations
putStrLn $ showCReal 70 $ a'g_pi iterations</lang>
putStrLn $ showCReal 70 $ almkvistGiulleraPi iterations
</lang>


{{Out}}
{{Out}}