import Math.Statistics.Fusion import Data.Array.Vector 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" (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 -} {- Main_mainzuzdszdwfoldlMzuloop_info: testq %r14, %r14 jle .L11 movq %rsi, %rdx movsd .LC0(%rip), %xmm0 cvtsi2sdq %rdx, %xmm8 subsd %xmm5, %xmm0 leaq -1(%r14), %r14 divsd %xmm8, %xmm0 leaq 1(%rsi), %rsi addsd %xmm0, %xmm5 jmp Main_mainzuzdszdwfoldlMzuloop_info -}