[comp.lang.c] Modulo arithmetic

Robert_A_Freed@cup.portal.com (02/12/88)

In article <8802101657.AA08427@decwrl.dec.com> fulton@navion.dec.com 
writes about a formula, for calculating the day of the week for a given 
date, which was recently posted in sci.math.

> Then you have -1 MOD 7  =>  -1,  which does not equate to any of
> the numbers assigned to Sunday thru Saturday, namely 0 thru 6. 

This depends upon how one defines the MOD (modulo) operation.  
Mathematicians usually consider only final results which are positive. 
I.e. in your example, -1 MOD 7 => 6.  Computer languages and/or library 
functions usually generate the signed division remainder as you've 
shown, e.g. Fortran's MOD function.

(I was going to cite the C `%' operator, but I just consulted Harbison 
and Steele and found the following of interest:  "When both operands 
are positive, the remainder operation will always be equivalent to the 
mathematical ``mod'' operation.  Note that this completely specifies
the behavior of the remainder operation for unsigned operands.  If 
either operand is negative, the behavior will be machine dependent in a 
manner corresponding to the machine dependence of integer division.  
For maximum portability, programs should therefore avoid depending on 
the behavior of the remainder operator when applied to negative 
integral operands.")

>                                                      perhaps the
> original formula could be  changed  so  that  the result doesn't
> require "fixing" if it comes out negative.
>        
> - Cathy Fulton
>
> uucp: ...decwrl!comet.dec.com!fulton
> ARPA: fulton@comet.dec.com

Easy:  Change the -2C term to +5C.  Same result modulo 7.

Bob Freed             Internet: Robert_A_Freed@cup.portal.com
Newton Centre, MA     UUCP: ...!sun!portal!cup.portal.com!Robert_A_Freed