MinHugs-Sep2006.exe does wrong Integer arithmetic

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

MinHugs-Sep2006.exe does wrong Integer arithmetic

rolle
(Re-sending.  Does this list drop mail from non-subscribers?)

I've seen the hugs distribution that is hosted as
http://ndmitchell.googlecode.com/files/MinHugs-Sep2006.exe
and has the SHA1 checksum 02f62efe00334007eb7083d09bae6e692a48c7c2
evaluate the script below incorrectly on two different Windows XP
computers.

The correct output is [], but I get a non-empty list.  On one
computer
I get different output for successive runs of the same script
(restarting hugs) by saying "main".  On the other one I get
different
output by saying "main" versus "ls".

I can't reproduce the problem on two different UNIX-like systems
with
the September 2006 version of hugs.  The problem goes away by
replacing
"Integer" with "Int".


type Z = Integer

qs :: Z -> Z
qs 0 = 0
qs x = let (q,r) = divMod x 10 in r + qs q

iqs :: Z -> Z
iqs x = if x < 10 then x else iqs (qs x)

ok :: Z -> Z -> Bool
ok x y = iqs (iqs x * iqs y) == iqs (x*y)

n :: Z
n = 1000

ls :: [(Z,Z)]
ls = [(x,y) | x<-[1..n], y<-[x..n], not (ok x y)]

main = print ls


_______________________________________________
Hugs-Bugs mailing list
[hidden email]
http://www.haskell.org/mailman/listinfo/hugs-bugs