Boost logo

Boost :

From: Daryle Walker (darylew_at_[hidden])
Date: 2006-11-04 15:34:20


I'm working on a bug that's only present on machines that use 2's complement
for their built-in integers that use all possible bit combinations (like the
common platforms). How can I detect this?

Stuff I tried (knowing that my system matches):

1. -INT_MIN == INT_MIN
    My compiler didn't find it a match for some reason
    (Apple's special GCC on Mac OS X 10.4.8)
2. (INT_MIN % 3 != 0) && (INT_MIN % 2 == 0)
    This is true, especially since I was doing a GCD(INT_MIN, 6) == 2,
    but I don't think it's sufficient.
3. -1 == ~0
    This worked. Then I found out that ~0 may trap on some systems
    (like 1s' complement). Worse, I found out that INT_MIN could
    equal -INT_MAX, leaving out the final power of 2 for trap reasons,
    so [2] is flawed.
4. ~1 == -2
    Also 2's complement, but leaves out the trap possibility (not
    tried)
5. INT_MIN + INT_MAX == -1
    This worked. It guarantees the bounds, but not that INT_MIN is
    a negative of a power of 2.
6. (INT_MIN + INT_MAX == -1) && ((INT_MIN ^ INT_MAX) == -1)
    This is what I currently got. It matches two properties of
    2's complement systems that use every bit combination. But is
    it sufficient?
7. [6] && [4]
    (Not tried) Would this be an improvement? Or is it redundant?

-- 
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT hotmail DOT com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk