Almkvist-Giullera formula for pi: Difference between revisions

Content added Content deleted
m (→‎{{header|Haskell}}: Fix names.)
m (→‎{{header|Haskell}}: Formatting; switch from mapM_ to forM_ for legibility)
Line 580: Line 580:
{{libheader|numbers}}
{{libheader|numbers}}
{{trans|Common Lisp}}
{{trans|Common Lisp}}
<lang haskell>import GHC.Integer
<lang haskell>import Control.Monad
import Data.Number.CReal
import Data.Number.CReal
import GHC.Integer
import Text.Printf
import Text.Printf


Line 597: Line 598:
-- The almkvistGiulleraIntegral part of the Nth term in the Almkvist-Giullera series
-- The almkvistGiulleraIntegral part of the Nth term in the Almkvist-Giullera series
almkvistGiulleraIntegral :: Integer -> Integer
almkvistGiulleraIntegral :: Integer -> Integer
almkvistGiulleraIntegral n =
almkvistGiulleraIntegral 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 622: Line 623:
iterations = 52
iterations = 52
main :: IO ()
main :: IO ()
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 (almkvistGiulleraIntegral n) (tenExponent n) (showCReal 50 (almkvistGiullera n))) [0..9]

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
printf "\nPi after %d iterations:\n" iterations
putStrLn $ showCReal 70 $ almkvistGiulleraPi iterations
putStrLn $ showCReal 70 $ almkvistGiulleraPi iterations</lang>
</lang>


{{Out}}
{{Out}}