import Math.Statistics.Fusion import qualified Data.Vector.Unboxed as V import Text.Printf import Data.List main = printf "%f\n" (mean (V.replicate 1000000000 (pi :: Double))) {- main = printf "%f\n" (mean (replicate 1000000000 (pi :: Double))) where mean x = fst $ foldl' (\(!m, !n) x -> (m+(x-m)/(n+1),n+1)) (0,0) x -} {- Main_zdwfold_info: .Lc122: movq %rdi,%rax cmpq $10000000,%rax jne .Lc126 movq %rsi,%rbx jmp *(%rbp) .Lc126: incq %rax leaq 1(%rsi),%rcx cvtsi2sdq %rsi,%xmm0 movsd .Ln128(%rip),%xmm7 subsd %xmm5,%xmm7 divsd %xmm0,%xmm7 addsd %xmm7,%xmm5 movq %rcx,%rsi movq %rax,%rdi jmp Main_zdwfold_info -} {- -- ghc 6.12, vector package Main_mainzuzdszdwfoldlMzuloop_info: testq %r14, %r14 jle .L11 movq %rsi, %rdx movsd .LC0(%rip), %xmm0 cvtsi2sdq %rdx, %xmm8 leaq -1(%r14), %r14 subsd %xmm5, %xmm0 leaq 1(%rsi), %rsi divsd %xmm8, %xmm0 addsd %xmm0, %xmm5 jmp Main_mainzuzdszdwfoldlMzuloop_info -}