Almkvist-Giullera formula for pi: Difference between revisions
Content added Content deleted
m (→{{header|Haskell}}: Formatting; switch from mapM_ to forM_ for legibility) |
m (→{{header|Haskell}}: reorganize) |
||
Line 585: | Line 585: | ||
import Text.Printf |
import Text.Printf |
||
⚫ | |||
⚫ | |||
⚫ | |||
facInteger :: Integer -> Integer |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
powInteger :: Integer -> Integer -> Integer |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
-- The |
-- The integral part of the Nth term in the Almkvist-Giullera series |
||
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 |
||
Line 605: | Line 607: | ||
-- The exponent for 10 in the Nth term of the series |
-- The exponent for 10 in the Nth term of the series |
||
tenExponent :: Integer -> Integer |
|||
tenExponent n = 3 `minusInteger` (6 `timesInteger` (1 `plusInteger` n)) |
tenExponent n = 3 `minusInteger` (6 `timesInteger` (1 `plusInteger` n)) |
||
-- The Nth term in the series |
-- The Nth term in the series (integral * 10^tenExponent) |
||
almkvistGiullera :: Integer -> CReal |
|||
almkvistGiullera n = fromInteger (almkvistGiulleraIntegral 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 |
||
almkvistGiulleraSum :: Integer -> CReal |
|||
almkvistGiulleraSum n = sum $ map almkvistGiullera [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 |
||
almkvistGiulleraPi :: Integer -> CReal |
|||
almkvistGiulleraPi n = sqrt $ 1 / almkvistGiulleraSum n |
almkvistGiulleraPi n = sqrt $ 1 / almkvistGiulleraSum n |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
main :: IO () |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
</lang> |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
{{Out}} |
{{Out}} |