# rem

Remainder after division

## 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; b = 3; r = rem(a,b)

`r = `*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 have the same sign as the dividend.

a = [-4 -1 7 9]; b = 3; r = rem(a,b)

`r = `*1×4*
-1 -1 1 0

### Remainder After Division for Floating-Point Values

Find the remainder after division for several angles using a divisor of `2*pi`

. When possible, `rem`

attempts to produce exact integer results by compensating for floating-point round-off effects.

theta = [0.0 3.5 5.9 6.2 9.0 4*pi]; b = 2*pi; r = rem(theta,b)

`r = `*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 `b`

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

is
an `M`

-by-`N`

matrix and
`b`

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
`b`

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

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`

`b`

— Divisor

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

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

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

and `b`

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

is
an `M`

-by-`N`

matrix and
`b`

is a scalar or
`1`

-by-`N`

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

If `b`

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

## Extended Capabilities

### Tall Arrays

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

The
`rem`

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:

Generated code performs the arithmetic 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`

, then 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 `rem`

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 `rem`

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)