GHCi wrong execution time report
Hello,
using latest GHC 6.6.1 binary package for windows, I've received strange information about execution time for the module below.
My machine: OS WinXP Pro SP2, Intel Core 2, 2GB RAM.
How to reproduce error:
:set +s
:set -02
:cd <path to the file in the attachment>
:l Primes
Then running
take 10000 primes1
take 10000 primes2
take 10000 primes3
take 10000 primes1'
take 10000 primes2'
take 10000 primes3'
Results seem to be correct, but the execution time reported no. First column is the GHCi report, the second column is th stop-watch data (just to correlate). No other task, except core windows, was running at the moment.
GHCi Stop-watch
236.03 672.2
63.52 63.9
63.01 64.0
1098.75 671.0
-365.07 65.2 // it's not a typo, really minus three hundred and sixty five
63.59 63.6
Best regards,
Dusan
module Primes (
primes1
,primes2
,primes3
,primes2'
,primes3'
) where
candidates = map (\x -> (True,x)) [2..]
candidates' = [2..]
skipmap f toSkip list = domap toSkip list
where
domap n (x:xs)
| n > 1 = x : domap (n-1) xs
| True = f x : domap toSkip xs
domap _ [] = []
primes1 = sieve candidates
where
sieve (pp@(isp,p):xs)
| isp = p : (sieve $ skipmap (\(_,v) -> (False,v)) p xs)
| True = sieve xs
primes1' = sieve candidates'
where
sieve (p:xs)
| p > 0 = p : (sieve $ skipmap (\n -> if n>0 then (-n) else n) p xs)
| True = sieve xs
sieve (p:xs) = p : sieve [y | y <- xs, y `mod` p /= 0]
sieve' (p:xs) = p : sieve [y | y <- xs, y `mod` p > 0]
primes2 = sieve [2..]
primes3 = 2 : sieve [3,5..]
primes2' = sieve' [2..]
primes3' = 2 : sieve' [3,5..]