## Modulo Operator## M[UMPS] by Example |

Introduced in the 1977 ANSI M[UMPS] language standard.

This is probably the most mis-understood operator (or function) in many programming languages. FORTRAN and C have 'remainder' operators, Ada and M[UMPS] have a true 'modulo' operator. These two are not the same (although the result is identical when both operands are positive).

The definition of *remainder* depends on *where you went
to school*. If you learned math in Europe, you will have a
radically different opinion about the sign of a remainder than if
you went to school in the USA (when either or both of the
operands are negative, that is, when both operands are positive,
everyone agrees).

Both 'schools' are correct, and, as long as you follow your
definition consistently, you will have no problems.

In M[UMPS], however, there is no *remainder* operator. There
is the *modulo* instead.

The definition of *modulo* is based on Abelian group theory,
and the true mathematical definition is little known outside of
mathematical graduate schools (see for instance Donald Knuth's
** The Art of Computer Programming**, Volume 1, page 23
and further), but the following explanation is close enough for
practical purposes:

The mathematical definition of Modulo maps a potentially
infinitely large set of numbers onto a (usually finite) subset.
The subset is repeated cyclically to map every number from the
original set onto a member of the subset.

`number#sub` means: map the number on the left-hand side
onto the subset ` [0,sub)` (0, zero inclusive, sub
exclusive). If sub is negative, this should be

For example,

number | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |

number#(5) | 1 | 2 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 | 3 | 4 | 0 | 1 | 2 | 3 | 4 |

number#(-5) | -4 | -3 | -2 | -1 | 0 | -4 | -3 | -2 | -1 | 0 | -4 | -3 | -2 | -1 | 0 | -4 | -3 | -2 | -1 |

Added in the 1995 ANSI M[UMPS] language standard:

Reference | Value | |
---|---|---|

X#0 |
Error (M9) |

Copyright © Standard Documents; 1977-2018 MUMPS Development Committee;

Copyright © Examples: 1995-2018 Ed de Moel;

Copyright © Annotations: 2003-2008 Jacquard Systems Research

Copyright © Annotations: 2008-2018 Ed de Moel.

*The information in this page is
NOT authoritative and subject to be modified
at any moment.Please consult the
appropriate (draft) language standard for an
authoritative definition.*

*Some specifications are "approved
for inclusion in a future standard". Note
that the MUMPS Development Committee cannot
guarantee that such future standards will
indeed be published.*

This page most recently updated on 12-Sep-2014, 14:08:54 .

For comments, contact Ed de Moel (demoel@jacquardsystems.com)