Main Content

Factorial of input

`f = factorial(`

returns
the product of all positive integers less than or equal to `n`

)`n`

,
where `n`

is a nonnegative integer value. If `n`

is
an array, then `f`

contains the factorial of each
value of `n`

. The data type and size of `f`

is
the same as that of `n`

.

The factorial of `n`

is commonly written in
math notation using the exclamation point character as *n!*.
Note that `n!`

is not a valid MATLAB^{®} syntax
for calculating the factorial of `n`

.

**Limitations**

For double-precision inputs, the result is exact when

`n`

is less than or equal to`21`

. Larger values of`n`

produce a result that has the correct order of magnitude and is accurate for the first 15 digits. This is because double-precision numbers are only accurate up to 15 digits.For single-precision inputs, the result is exact when

`n`

is less than or equal to`13`

. Larger values of`n`

produce a result that has the correct order of magnitude and is accurate for the first 8 digits. This is because single-precision numbers are only accurate up to 8 digits.

**Saturation**

The table below describes the saturation behavior of each data type when used with the

`factorial`

function. The values in the last column indicate the saturation point; that is, the first positive integer whose actual factorial is larger than the maximum representable value in the middle column. For`single`

and`double`

, all values larger than the maximum value are returned as`Inf`

. For the integer data types, the saturation value is equal to the maximum value in the middle column.Data type Maximum Value Factorial Saturation Threshold `double`

`realmax`

`factorial(171)`

`single`

`realmax('single')`

`factorial(single(35))`

`uint64`

2 ^{64}-1`factorial(uint64(21))`

`int64`

2 ^{63}-1`factorial(int64(21))`

`uint32`

2 ^{32}-1`factorial(uint32(13))`

`int32`

2 ^{31}-1`factorial(int32(13))`

`uint16`

2 ^{16}-1`factorial(uint16(9))`

`int16`

2 ^{15}-1`factorial(int16(8))`

`uint8`

2 ^{8}-1`factorial(uint8(6))`

`int8`

2 ^{7}-1`factorial(int8(6))`