On Thu, Jan 29, 2009 at 11:30 AM, Duncan Coutts <[email protected]> wrote: > On Thu, 2009-01-29 at 10:35 +0000, John Lato wrote: >> > On Wed, 2009-01-28 at 20:11 -0500, sam lee wrote: >> >> Did you print it? I'm using same code with ghc --make -O2 and it >> >> takes forever to finish. >> > >> > Yes, you can see in the output that it prints the same answer in each >> > case. I was using r = 10^9 as you suggested. >> >> I wouldn't call these answers the same. Can this be ascribed to an >> overflow error? > > Oh yes, you're quite right. I didn't notice because it only affects the > middle digits :-) > >> >> > C version: >> >> > $ time ./circ >> >> > 3141592649589764829 >> ^^ >> > >> >> > Haskell version: >> >> > time ./circ2 >> >> > 3141592653589764829 > > Compare: > > circ2 r = (1+4*r) + 4 * (circ2' (rs+1) r 1 0) > > vs > > # the main loop > } > sum*=4; > sum++; > > Looks like the C version misses the +4*r at the end. > > 3141592649589764829 + 4*10^9 > = 3141592653589764829 > > Assuming that's right, the mistake only costs constant-time and doesn't > invalidate the timings. >
Thank you. That explains it nicely. Giving credit where it's due, Lennart A. also pointed out that the difference is 4e9 and suspected a boundary case. I think I need more coffee today :) John Lato _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
