------- Additional Comments From pluto at agmk dot net 2005-06-17 09:33 ------- (In reply to comment #9) > (In reply to comment #8) > > did i miss something in my math? > > Yes in C, % (remainder and not mod) is negative iff one of the operands is negative. > so it is -2*2 + -1 = -5. , integer divide in C is truncated.
[ cite ] "The New ISO Standard for C (C9X)" 25). The integer division and modulus operators are defined to perform truncation *towards zero*. (In C89, it was implementation-defined whether truncation was done towards zero or -infinity. This is (obviously) important only if one or both operands are negative. Consider: -22 / 7 = -3 truncation towards zero -22 % 7 = -1 -22 / 7 = -4 truncation towards -infinity -22 % 7 = 6 Both satisfy the required equation (a/b)*b + a%b == a. The second has the advantage that the modulus is always positive -- but they decided on the other (more Fortran-like, less Pascal-like) variant...) [ /cite ] so it's all clear now. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22072