"Jean-Denis Muys" <jdm...@kleegroup.com> wrote in message news:c6386d6d.45a7%jdm...@kleegroup.com > On 5/19/09 1:57 PM, "Igor Tandetnik" > <itandet...@mvps.org> wrote: > >> "John Machin" <sjmac...@lexicon.net> >> wrote in message >> news:4a129cb4.2090...@lexicon.net >>> It's handy for checking how things work e.g. >>> >>> sqlite> select (-1) % 7; >>> -1 >>> sqlite> -- it's not a real modulo operator :-( >> >> What do you feel is wrong with this result? What should a "real" >> modulo operator return, in your opinion? Before you answer, note >> that you very likely want this equality to hold for all a, b!=0 : >> >> a = q*b + r >> where q = a/b, r = a%b >> >> Igor Tanetnik >> > > My math courses taught me a long time ago, that the remainder r in > Euclidian division of a by b is defined by: > > There exists unique natural numbers q and r such as: > > a = b*q+r > 0 <= r < b > > q is defined as the quotient, r is defined as the remainder. > > So if the % operator wants to match that math definition, its results > should > never be negative. In the example given, (-1)%7 should therefore be 6.
Well then, for the equality to hold, (-1)/7 should be -1. Would you be happy with such an outcome? Wikipedia gives a definition different from yours, for what it's worth: http://en.wikipedia.org/wiki/Remainder#The_case_of_general_integers http://en.wikipedia.org/wiki/Modulo_operation Once you decide that division truncates towards zero (as is the long-standing tradition in C and many other languages, for better or worse), you have no choice but to let the remainder take the sign of the dividend. Igor Tandetnik _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users