/*Copyright (C) 1992, 1996 by Thomas Glen Smith. All Rights Reserved.*/ /* imod APL2 V1.0.0 ***************************************************** * Called by rotatesb. * * Given two operands of type int, imod returns the remainder from the * * division of the first operand by the second. e.g. mod(5,2) => 3, * * mod(5,-2) => 3, and mod(-5,-2) => -2. In pseudo-code, the logic for * * the answer is as follows: * * quotient := 0 * * loop * * remainder := numerator - quotient X denominator * * if (sign(remainder) == sign(denominator) && * * abs(remainder) < abs(denominator)) break * * quotient += sign(denominator) X sign(numerator) * * next loop * ************************************************************************/ #define INCLUDES 0 #include "includes.h" int imod(num,den) int num,den; { int i; if (den == 0) return(num); /* den | num = num */ if (num == 0) return(0); if (0 == (i = num % den)) return(0); if ((num > 0 && den > 0) || (num < 0 && den < 0)) return(i); return(i+den); }