MOD

MOD returns the modular equivalent of the remainder of one value divided by another.

MOD returns the smallest nonnegative value, R, such that (x - R)/y = n.

In this example, the value for n is an integer value. That is, R is the smallest nonnegative value that must be subtracted from x to make it divisible by y.

Read syntax diagramSkip visual syntax diagramMOD( x, y)
x
Real expression.
y
Real expression. If y = 0, the ZERODIVIDE condition is raised.
The result, R, is real with the common base and scale of the arguments. If the result is floating-point, the precision is the greater of those of x and y. If the result is fixed-point, the precision is given by the following:
  (min(n,p2-q2+max(q1,q2)),max(q1,q2))

In this example, (p1,q1) and (p2,q2) are the precisions of x and y, respectively, and n is N for FIXED DECIMAL or M for FIXED BINARY.

If x and y are fixed-point with different scaling factors, the argument with the smaller scaling factor is converted to the larger scaling factor before R is calculated. If the conversion fails, the result is unpredictable.

If the result has the attributes FIXED BIN and all of the operands have the attributes UNSIGNED FIXED BIN, then the result has the UNSIGNED attribute. If only some of the operands are UNSIGNED, then each UNSIGNED operand is converted to SIGNED. If the operand is too large, the conversion would:
  • Raise the SIZE condition if SIZE is enabled.
  • Produce a negative value if SIZE is not enabled.

Example

The following example contrasts the MOD and REM built-in functions.

  rem( +10, +8 ) = 2
  mod( +10, +8 ) = 2

  rem( +10, -8 ) = 2
  mod( +10, -8 ) = 2

  rem( -10, +8 ) = -2
  mod( -10, +8 ) = 6

  rem( -10, -8 ) = -2
  mod( -10, -8 ) = 6