Almkvist-Giullera formula for pi: Difference between revisions
m
→{{header|Haskell}}: reorganize
m (→{{header|Haskell}}: Formatting; switch from mapM_ to forM_ for legibility) |
m (→{{header|Haskell}}: reorganize) |
||
Line 585:
import Text.Printf
iterations = 52▼
-- Factorial for arbitrary-precision integers▼
main = do▼
printf "N. %44s %4s %s\n" ▼
facInteger n = if n `leInteger` 1 then 1 else n `timesInteger` facInteger (n `minusInteger` 1)▼
"Integral part of Nth term" "×10^" "=Actual value of Nth term"▼
forM_ [0..9] $ \n ->▼
-- Exponentiation for arbitrary-precision integers▼
printf "%d. %44d %4d %s\n" n▼
(almkvistGiulleraIntegral n)▼
powInteger 1 _ = 1▼
(tenExponent n)▼
powInteger _ 0 = 1▼
(showCReal 50 (almkvistGiullera n))▼
powInteger b 1 = b▼
powInteger b e = b `timesInteger` powInteger b (e `minusInteger` 1)▼
printf "\nPi after %d iterations:\n" iterations▼
-- The
almkvistGiulleraIntegral n =
let polynomial = (532 `timesInteger` n `timesInteger` n) `plusInteger` (126 `timesInteger` n) `plusInteger` 9
Line 605 ⟶ 607:
-- The exponent for 10 in the Nth term of the series
tenExponent n = 3 `minusInteger` (6 `timesInteger` (1 `plusInteger` n))
-- The Nth term in the series (integral * 10^tenExponent)
almkvistGiullera n = fromInteger (almkvistGiulleraIntegral n) / fromInteger (powInteger 10 (abs (tenExponent n)))
-- The sum of the first N terms
almkvistGiulleraSum n = sum $ map almkvistGiullera [0 .. n]
-- The approximation of pi from the first N terms
almkvistGiulleraPi n = sqrt $ 1 / almkvistGiulleraSum n
▲facInteger n = if n `leInteger` 1 then 1 else n `timesInteger` facInteger (n `minusInteger` 1)
▲iterations = 52
▲powInteger 1 _ = 1
▲powInteger _ 0 = 1
▲main = do
▲powInteger b 1 = b
▲ printf "N. %44s %4s %s\n"
▲powInteger b e = b `timesInteger` powInteger b (e `minusInteger` 1)
▲ "Integral part of Nth term" "×10^" "=Actual value of Nth term"
</lang>
▲ forM_ [0..9] $ \n ->
▲ printf "%d. %44d %4d %s\n" n
▲ (almkvistGiulleraIntegral n)
▲ (tenExponent n)
▲ (showCReal 50 (almkvistGiullera n))
▲ printf "\nPi after %d iterations:\n" iterations
▲ putStrLn $ showCReal 70 $ almkvistGiulleraPi iterations</lang>
{{Out}}
|