# mod

Remainder after division (modulo operation)

## Syntax

## Description

## Examples

### Remainder After Division of Scalar

### 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×5*
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 = `*1×4*
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×4*
-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 = `*1×6*
0 3.5000 5.9000 6.2000 2.7168 0

## Input Arguments

`a`

— Dividend

scalar | vector | matrix | multidimensional array | table | timetable

Dividend, specified as a scalar, vector, matrix, multidimensional array, table, or
timetable. `a`

must be a real-valued array of any numerical type. Inputs
`a`

and `m`

must either be the same size or have sizes that
are compatible (for example, `a`

is an
`M`

-by-`N`

matrix and `m`

is a scalar or
`1`

-by-`N`

row vector). For more information, see Compatible Array Sizes for Basic Operations.

If `a`

is a `duration`

array and `m`

is a numeric array, then the values in `m`

are treated as numbers of 24-hour
days.

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`

| `logical`

| `duration`

| `char`

| `table`

| `timetable`

`m`

— Divisor

scalar | vector | matrix | multidimensional array | table | timetable

Divisor, specified as a scalar, vector, matrix, multidimensional array, table, or
timetable. `m`

must be a real-valued array of any numerical type. Inputs
`a`

and `m`

must either be the same size or have sizes that
are compatible (for example, `a`

is an
`M`

-by-`N`

matrix and `m`

is a scalar or
`1`

-by-`N`

row vector). For more information, see Compatible Array Sizes for Basic Operations.

If `m`

is a `duration`

array and `a`

is a numeric array, then the values in `a`

are treated as numbers of 24-hour
days.

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`

| `logical`

| `duration`

| `char`

| `table`

| `timetable`

## More About

### 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.

## Extended Capabilities

### Tall Arrays

Calculate with arrays that have more rows than fit in memory.

The
`mod`

function fully supports tall arrays. For more information,
see Tall Arrays.

### C/C++ Code Generation

Generate C and C++ code using MATLAB® Coder™.

Usage notes and limitations:

Arithmetic is performed using the output class. Results might not match MATLAB

^{®}due to differences in rounding errors.If one of the inputs has type

`int64`

or`uint64`

, both inputs must have the same type.

### Thread-Based Environment

Run code in the background using MATLAB® `backgroundPool`

or accelerate code with Parallel Computing Toolbox™ `ThreadPool`

.

This function fully supports thread-based environments. For more information, see Run MATLAB Functions in Thread-Based Environment.

### GPU Arrays

Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.

The `mod`

function
supports GPU array input with these usage notes and limitations:

64-bit integers are not supported.

For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).

### Distributed Arrays

Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.

This function fully supports distributed arrays. For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).

## Version History

**Introduced before R2006a**

### R2023a: Perform calculations directly on tables and timetables

The `mod`

function can calculate on all variables within a table or
timetable without indexing to access those variables. All variables must have data types
that support the calculation. For more information, see Direct Calculations on Tables and Timetables.

## See Also

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)