Almkvist-Giullera formula for pi: Difference between revisions
Content added Content deleted
m (→{{header|Common Lisp}}: Fix names.) |
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 |
-- The almkvistGiulleraIntegral part of the Nth term in the Almkvist-Giullera series |
||
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 |
||
almkvistGiullera :: Integer -> CReal |
|||
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 |
||
almkvistGiulleraSum :: Integer -> CReal |
|||
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 |
||
almkvistGiulleraPi :: Integer -> CReal |
|||
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 ( |
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 $ |
putStrLn $ showCReal 70 $ almkvistGiulleraPi iterations |
||
</lang> |
|||
{{Out}} |
{{Out}} |