import Math.Statistics.Fusion import Data.Array.Vector import Text.Printf import Data.List -- main = printf "%f\n" (mean (replicateU 1000000000 (pi :: Double))) main = printf "%f\n" (var (replicateU 1000000000 (pi :: Double))) where mean x = fst $ foldl' (\(!m, !n) x -> (m+(x-m)/(n+1),n+1)) (0,0) x {- $wfold :: Int# -> Double# -> Double# -> Int# -> (# Int#, Double#, Double# #) -} {- Main_zdwfold_info: .Lc19X: movq %rdi,%rax cmpq $1000000000,%rax jne .Lc1a1 movq %rsi,%rbx jmp *(%rbp) .Lc1a1: movsd .Ln1a3(%rip),%xmm0 subsd %xmm5,%xmm0 cvtsi2sdq %rsi,%xmm7 movsd %xmm0,%xmm8 divsd %xmm7,%xmm8 movsd %xmm5,%xmm7 addsd %xmm8,%xmm7 incq %rax movsd .Ln1a4(%rip),%xmm8 subsd %xmm7,%xmm8 mulsd %xmm8,%xmm0 movsd %xmm6,%xmm8 addsd %xmm0,%xmm8 incq %rsi movsd %xmm7,%xmm5 movsd %xmm8,%xmm6 movq %rax,%rdi jmp Main_zdwfold_info -}