Main Content

factorial

输入的阶乘

说明

示例

f = factorial(n) 返回所有小于或等于 n 的正整数的乘积,其中 n 为非负整数值。如果 n 为数组,则 f 包含 n 的每个值的阶乘。fn 具有相同的数据类型和大小。

n 的阶乘通常使用感叹号字符以数学表示法写为 n!。请注意,n! 不是用于计算 n 的阶乘的有效 MATLAB® 语法。

示例

全部折叠

f = factorial(10)
f = 3628800
format long
f = factorial(22)
f = 
     1.124000727777608e+21

在此示例中,f 最多精确到 15 位数字 1.12400072777760e+21,因为双精度数只能精确到 15 位数字。

将输出格式重置为默认设置。

format
n = [0 1 2; 3 4 5];
f = factorial(n)
f = 2×3

     1     1     2
     6    24   120

n = uint64([5 10 15 20]);
f = factorial(n)
f = 1x4 uint64 row vector

                   120               3628800         1307674368000   2432902008176640000

输入参数

全部折叠

输入值,指定为标量、向量、实数数组、非负整数。

示例: 5

示例: [0 1 2 3 4]

示例: int16([10 15 20])

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

提示

局限性

  • 对于双精度输入,当 n 小于或等于 21 时,结果完全相同。n 中更大的值会生成具有正确的数量级且精确到前 15 位数字的结果。这是因为双精度数只能精确到 15 位数字。

  • 对于单精度输入,当 n 小于或等于 13 时,结果完全相同。n 中更大的值会生成具有正确的数量级且精确到前 8 位数字的结果。这是因为单精度数只能精确到 8 位数字。

饱和度

  • 下表描述了当与 factorial 函数一起使用时每种数据类型的饱和度行为。最后一列中的值指示饱和点;即,实际阶乘大于中间列中最大可表示值的第一个正整数。对于 singledouble,大于最大值的所有值都以 Inf 形式返回。对于整数数据类型,饱和度值等于中间列中的最大值。

    数据类型最大值阶乘饱和阈值
    doublerealmaxfactorial(171)
    singlerealmax('single')factorial(single(35))
    uint64264-1factorial(uint64(21))
    int64263-1factorial(int64(21))
    uint32232-1factorial(uint32(13))
    int32231-1factorial(int32(13))
    uint16216-1factorial(uint16(9))
    int16215-1factorial(int16(8))
    uint828-1factorial(uint8(6))
    int827-1factorial(int8(6))

扩展功能

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。

版本历史记录

在 R2006a 之前推出

另请参阅