
On 19/08/2013, at 3:38 AM, Nicolas Frisby wrote:
The docs at
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:gc...
give a NB mentioning that (abs minBound == minBound) is possible for fixed-width types.
At least three ways to represent negative integers in binary have been used: - twos-complement (asymmetric, -INT_MIN == INT_MIN, abs can have a negative result) - ones-complement (symmetric, -INT_MIN == INT_MAX, abs is always non-negative) - sign-and-magnitude (symmetric, -INT_MIN == INT_MAX, abs is always non-negative) Having used a B6700 as an undergraduate, I still think sign-and-magnitude is the only really safe-and-simple scheme. However, twos-complement has conquered. The argument for twos-complement, which always puzzled me, is that the other systems have two ways to represent zero. I never found this to be a problem, not even for bitwise operations, on the B6700. I *did* find "abs x < 0" succeeding to be a pain in the posterior. (The B6700 had two different tests: 'are these two numbers equal' and 'are these two bit patterns equal'.)
Two questions:
1) This behavior surprised me. Does it surprise enough people to include a warning in the Haddock for abs and negate?
We cannot expect everyone who uses Haskell to be familiar with the eccentricities of popular hardware. I think it's worth mentioning.
2) Is this a common behavior in other languages?
Yes.
My tinkering with gcc suggests it does not support the value -2^63, but instead bottoms out at (-2^63+1).
Your tinkering was insufficient.
f% cat 2c.c
#include
Thanks. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe