# rem

Remainder after division

## Syntax

``r = rem(a,b)``

## Description

example

````r = rem(a,b)` returns the remainder after division of `a` by `b`, where `a` is the dividend and `b` is the divisor. This function is often called the remainder operation, which can be expressed as `r = a - b.*fix(a./b)`. The `rem` function follows the convention that `rem(a,0)` is `NaN`.```

## Examples

collapse all

Compute the remainder after dividing 5 into 23.

```a = 23; b = 5; r = rem(a,b)```
```r = 3 ```

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

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

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

collapse all

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`

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`

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

## Version History

Introduced before R2006a

expand all