# mod

Remainder after division (modulo operation)

## Description

example

````b = mod(a,m)` returns the remainder after division of `a` by `m`, where `a` is the dividend and `m` is the divisor. This function is often called the modulo operation and is computed using `b = a - m.*floor(a./m)`. The `mod` function follows the convention that `mod(a,0)` returns `a`.```

## Examples

collapse all

### Remainder After Division of Scalar

Compute 23 modulo 5.

`b = mod(23,5)`
```b = 3```

### Remainder After Division of Vector

Find the remainder after division for a vector of integers and the divisor `3`.

```a = 1:5; m = 3; b = mod(a,m)```
```b = 1 2 0 1 2```

### Remainder After Division for Positive and Negative Values

Find the remainder after division for a set of integers including both positive and negative values. Note that nonzero results are always positive if the divisor is positive.

```a = [-4 -1 7 9]; m = 3; b = mod(a,m)```
```b = 2 2 1 0```

### Remainder After Division for Negative Divisor

Find the remainder after division by a negative divisor for a set of integers including both positive and negative values. Note that nonzero results are always negative if the divisor is negative.

```a = [-4 -1 7 9]; m = -3; b = mod(a,m)```
```b = -1 -1 -2 0```

### Remainder After Division for Floating-Point Values

Find the remainder after division for several angles using a modulus of `2*pi`. Note that `mod` attempts to compensate for floating-point round-off effects to produce exact integer results when possible.

```theta = [0.0 3.5 5.9 6.2 9.0 4*pi]; m = 2*pi; b = mod(theta,m)```
```b = 0 3.5000 5.9000 6.2000 2.7168 0```

## Input Arguments

collapse all

### `a` — Dividendscalar | vector | matrix | multidimensional array

Dividend, specified as a scalar, vector, matrix, or multidimensional array. `a` must be a real-valued array of any numerical type. Inputs `a` and `m` must be the same size unless one is a scalar `double`. If one input has an integer data type, then the other input must be of the same integer data type or be a scalar `double`.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64`

### `m` — Divisorscalar | vector | matrix | multidimensional array

Divisor, specified as a scalar, vector, matrix, or multidimensional array. `m` must be a real-valued array of any numerical type. Inputs `a` and `m` must be the same size unless one is a scalar `double`. If one input has an integer data type, then the other input must be of the same integer data type or be a scalar `double`.

Data Types: `single` | `double` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64`

collapse all

### Differences Between mod and rem

The concept of remainder after division is not uniquely defined, and the two functions `mod` and `rem` each compute a different variation. The `mod` function produces a result that is either zero or has the same sign as the divisor. The `rem` function produces a result that is either zero or has the same sign as the dividend.

Another difference is the convention when the divisor is zero. The `mod` function follows the convention that `mod(a,0)` returns `a`, whereas the `rem` function follows the convention that `rem(a,0)` returns `NaN`.

Both variants have their uses. For example, in signal processing, the `mod` function is useful in the context of periodic signals because its output is periodic (with period equal to the divisor).

### Congruence Relationships

The `mod` function is useful for congruence relationships: `a` and `b` are congruent (mod m) if and only if `mod(a,m) == mod(b,m)`. For example, 23 and 13 are congruent (mod 5).

## References

[1] Knuth, Donald E. The Art of Computer Programming. Vol. 1. Addison Wesley, 1997 pp.39–40.