function value = i4_modp ( i, j )
%*****************************************************************************80
%
%% i4_modp() returns the nonnegative remainder of I4 division.
%
% Discussion:
%
% If
% NREM = I4_MODP ( I, J )
% NMULT = ( I - NREM ) / J
% then
% I = J * NMULT + NREM
% where NREM is always nonnegative.
%
% The MOD function computes a result with the same sign as the
% quantity being divided. Thus, suppose you had an angle A,
% and you wanted to ensure that it was between 0 and 360.
% Then mod(A,360) would do, if A was positive, but if A
% was negative, your result would be between -360 and 0.
%
% On the other hand, I4_MODP(A,360) is between 0 and 360, always.
%
% Example:
%
% I J MOD I4_MODP Factorization
%
% 107 50 7 7 107 = 2 * 50 + 7
% 107 -50 7 7 107 = -2 * -50 + 7
% -107 50 -7 43 -107 = -3 * 50 + 43
% -107 -50 -7 43 -107 = 3 * -50 + 43
%
% Licensing:
%
% This code is distributed under the GNU LGPL license.
%
% Modified:
%
% 02 March 1999
%
% Author:
%
% John Burkardt
%
% Input:
%
% integer I, the number to be divided.
%
% integer J, the number that divides I.
%
% Output:
%
% integer VALUE, the nonnegative remainder when I is
% divided by J.
%
if ( j == 0 )
fprintf ( 1, '\n' );
fprintf ( 1, 'I4_MODP - Fatal error!\n' );
fprintf ( 1, ' Illegal divisor J = %d\n', j );
error ( 'I4_MODP - Fatal error!' );
end
value = mod ( i, j );
if ( value < 0 )
value = value + abs ( j );
end
return
end