
Boost : 
From: Anthony Williams (anthwil_at_[hidden])
Date: 20020823 03:30:21
Greg Colvin writes:
> At 12:38 PM 8/22/2002, David Bergman wrote:
> >And, obviously, signed integer arithmetics cannot take place in a modulo
> >ring, since such a ring does not include negative numbers...
> >
> >But, that is not a loophole for using doubleprecision in interims,
> >since the positive numbers of "int" (just to take an integral example)
> >have to be a subset of "unsigned int", so see, you still cannot maneuver
> >out of the modulo ring...
> >
> >I.e., it is still invalid of an implementation to do the trick you
> >described.
>
> No, it is perfectly valid. If the product of two ints overflows all
> bets are off.
Which means, as I said before, that a compiler can define it in specific
circumstances  i.e. they can say "a*b/c" is valid if it yields an inrange
result, even if a*b overflows. Many (x86) compilers will provide a valid
result in this case anyway, because its the fewest instructions, and undefined
behaviour on overflow means they're allowed. If the result still doesn't fit,
they'll generate a dividebyzero error, which is also allowed as undefined
behaviour.
Anthony
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk