
On Fri, Jun 28, 2002 at 03:54:50PM -0400, Dylan Thurston wrote:
On Fri, Jun 28, 2002 at 10:24:13AM +0100, Malcolm Wallace wrote:
Yes, -5`div`2 == -(5`div`2) == -2 but (-5)`div`2 == -3
Ghc 5.02.2 has the infix priority wrong, and interprets the former as the latter. But more bizarrely, ghc 5.02.2 gets this very wrong:
Prelude> (-1796254192) `div` 357566600 5
Thanks for the clear summary.
After a looking a little more, there seem to be other problems (including errors in my proposed solution). I don't know where the code for quotRem is, but it is also buggy. For instance, Prelude> 9 `quotRem` (-5) (-1,4) (The correct answer is (-1,-4).) I'm frankly astonished: has noone used these functions with negative arguments before? This happens with both ghci and compiled programs, both -fvia-C and -fasm. Hugs (see below) and nhc make the same error in this case. There seems to be too strong a reliance on C's operators '/' and '%', which give these results (with gcc on x86). This may be a bug in gcc. I'm using gcc 2.95.4; I'm not sure which version compiled the Debian packages I'm using. According to http://home.tiscalinet.ch/t_wolf/tw/c/c9x_changes.html#Semantics, the C9x standard specifies that division should truncate towards 0; I believe that earlier it was undefined. I'm shocked that non of the three Haskell implementations had a test suite that caught this problem. ----- __ __ __ __ ____ ___ _________________________________________ || || || || || || ||__ Hugs 98: Based on the Haskell 98 standard ||___|| ||__|| ||__|| __|| Copyright (c) 1994-2001 ||---|| ___|| World Wide Web: http://haskell.org/hugs || || Report bugs to: hugs-bugs@haskell.org || || Version: February 2001 _________________________________________ Haskell 98 mode: Restart with command line option -98 to enable extensions Reading file "/usr/share/hugs98/lib/Prelude.hs": Hugs session for: /usr/share/hugs98/lib/Prelude.hs Type :? for help Prelude> 9 `quotRem` (-5) (-1,4) -----