Haskell で 積分(中点則)して π を求める
積分(中点則)
f::Double->Double f x = 4 / (1 + (x * x))
import Text.Printf import Control.Monad forM_ ([1..10::Integer]) $ \j -> do let n = 2 ^ j let a = 0.0 let b = 1.0 let h = (b - a) / (fromIntegral n) -- 中点則で積分 let a2 = a + (h / 2) let w1 = sum $ map(\x -> f x) $ map(\i -> (fromIntegral i) * h + a2) $ [0..(n-1)] let t1 = h * w1 -- 結果を π と比較 let t2 = t1 - pi printf "%3d : %13.10f, %13.10f\n" j t1 t2
1 : 3.1623529412, 0.0207602876 2 : 3.1468005184, 0.0052078648 3 : 3.1428947296, 0.0013020760 4 : 3.1419181743, 0.0003255207 5 : 3.1416740338, 0.0000813802 6 : 3.1416129986, 0.0000203451 7 : 3.1415977399, 0.0000050863 8 : 3.1415939252, 0.0000012716 9 : 3.1415929715, 0.0000003179 10 : 3.1415927331, 0.0000000795
参考文献