math — 数学函数 — Python 文档
math — 数学函数
该模块提供对 C 标准定义的数学函数的访问。
这些函数不能用于复数; 如果您需要支持复数,请使用 cmath 模块中的同名函数。 区分支持复数和不支持复数的函数是因为大多数用户不想学习理解复数所需的太多数学知识。 接收异常而不是复数结果允许更早地检测用作参数的意外复数,以便程序员可以首先确定它是如何以及为什么生成的。
该模块提供以下功能。 除非另有明确说明,所有返回值都是浮点数。
数论和表示函数
- math.ceil(x)
- 返回 x 的上限,大于或等于 x 的最小整数。 如果 x 不是浮点数,则委托给
x.__ceil__()
,它应该返回一个 Integral 值。
- math.comb(n, k)
返回从 n 个项目中选择 k 个项目的方式数,不重复且无顺序。
k <= n
时计算为n! / (k! * (n - k)!)
,k > n
时计算为零。也称为二项式系数,因为它等效于表达式
(1 + x) ** n
的多项式展开中第 k 项的系数。如果任一参数不是整数,则引发 TypeError。 如果任一参数为负,则引发 ValueError。
3.8 版中的新功能。
- math.copysign(x, y)
- 返回大小(绝对值)为 x 但符号为 y 的浮点数。 在支持有符号零的平台上,
copysign(1.0, -0.0)
返回 -1.0。
- math.fabs(x)
- 返回 x 的绝对值。
- math.factorial(x)
将 x 阶乘作为整数返回。 如果 x 不是整数或为负,则引发 ValueError。
自 3.9 版起已弃用: 不推荐接受带有整数值的浮点数(如
5.0
)。
- math.floor(x)
- 返回 x 的下限,小于或等于 x 的最大整数。 如果 x 不是浮点数,则委托给
x.__floor__()
,它应该返回一个 Integral 值。
- math.fmod(x, y)
- 返回
fmod(x, y)
,由平台 C 库定义。 请注意,Python 表达式x % y
可能不会返回相同的结果。 C 标准的意图是fmod(x, y)
完全(数学上;无限精度)等于x - n*y
对于某个整数 n,使得结果具有相同的符号x 和小于abs(y)
的震级。 Python 的x % y
返回带有 y 符号的结果,并且对于浮点参数可能无法完全计算。 例如,fmod(-1e-100, 1e100)
是-1e-100
,但是 Python 的-1e-100 % 1e100
的结果是1e100-1e-100
,它不能完全表示为浮点数,四舍五入到令人惊讶的1e100
。 出于这个原因,函数 fmod() 在处理浮点数时通常是首选,而 Python 的x % y
在处理整数时是首选。
- math.frexp(x)
- 返回 x 的尾数和指数作为
(m, e)
对。 m 是一个浮点数,而 e 是一个整数,使得x == m * 2**e
正好。 如果 x 为零,则返回(0.0, 0)
,否则返回0.5 <= abs(m) < 1
。 这用于以可移植的方式“挑选”浮点数的内部表示。
- math.fsum(iterable)
返回可迭代对象中值的准确浮点总和。 通过跟踪多个中间部分和来避免精度损失:
>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 0.9999999999999999 >>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]) 1.0
该算法的准确性取决于 IEEE-754 算术保证以及舍入模式为半偶数的典型情况。 在某些非 Windows 版本中,底层 C 库使用扩展精度加法,有时可能会双舍入中间和,导致它的最低有效位关闭。
如需进一步讨论和两种替代方法,请参阅 ASPN 食谱以获取准确的浮点求和 。
- math.gcd(*integers)
返回指定整数参数的最大公约数。 如果任何参数不为零,则返回值是作为所有参数的除数的最大正整数。 如果所有参数都为零,则返回值是
0
。gcd()
不带参数返回0
。3.5 版中的新功能。
3.9 版更改: 添加了对任意数量参数的支持。 以前,只有两个论点得到支持。
- math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
如果值 a 和 b 彼此接近,则返回
True
,否则返回False
。根据给定的绝对和相对容差确定两个值是否接近。
rel_tol 是相对容差 - 它是 a 和 b 之间的最大允许差值,相对于 a 的较大绝对值或b。 例如,要设置 5% 的容差,请通过
rel_tol=0.05
。 默认容差为1e-09
,可确保两个值在大约 9 位十进制数字内相同。 rel_tol 必须大于零。abs_tol 是最小绝对容差 - 用于接近零的比较。 abs_tol 必须至少为零。
如果没有错误发生,结果将是:
abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
。NaN
、inf
和-inf
的 IEEE 754 特殊值将根据 IEEE 规则进行处理。 具体来说,NaN
不被认为接近任何其他值,包括NaN
。inf
和-inf
只被认为是靠近它们自己。3.5 版中的新功能。
也可以看看
PEP 485 – 测试近似相等的函数
- math.isfinite(x)
如果 x 既不是无穷大也不是 NaN,则返回
True
,否则返回False
。 (请注意,0.0
is 被认为是有限的。)3.2 版中的新功能。
- math.isinf(x)
- 如果 x 是正无穷大或负无穷大,则返回
True
,否则返回False
。
- math.isnan(x)
- 如果 x 是 NaN(不是数字),则返回
True
,否则返回False
。
- math.isqrt(n)
返回非负整数 n 的整数平方根。 这是 n 的精确平方根的下限,或等效的最大整数 a,使得 a² ≤ n。
对于某些应用,使用最小整数 a 可能更方便,使得 n ≤ a²,或者换句话说,精确平方的上限n 的根。 对于正 n,这可以使用
a = 1 + isqrt(n - 1)
计算。3.8 版中的新功能。
- math.lcm(*integers)
返回指定整数参数的最小公倍数。 如果所有参数都不为零,则返回值是所有参数的倍数的最小正整数。 如果任何参数为零,则返回值是
0
。lcm()
不带参数返回1
。3.9 版中的新功能。
- math.ldexp(x, i)
- 返回
x * (2**i)
。 这本质上是函数 frexp() 的反函数。
- math.modf(x)
- 返回 x 的小数部分和整数部分。 两个结果都带有 x 的符号并且是浮点数。
- math.nextafter(x, y)
返回 x 之后朝向 y 的下一个浮点值。
如果 x 等于 y,则返回 y。
例子:
math.nextafter(x, math.inf)
上升:朝向正无穷大。math.nextafter(x, -math.inf)
下降:朝向负无穷大。math.nextafter(x, 0.0)
趋向于零。math.nextafter(x, math.copysign(math.inf, x))
远离零。
另见 math.ulp()。
3.9 版中的新功能。
- math.perm(n, k=None)
返回从 n 个项目中选择 k 个项目的方式数量,不重复且有顺序。
k <= n
时计算为n! / (n - k)!
,k > n
时计算为零。如果 k 未指定或为 None,则 k 默认为 n,函数返回
n!
。如果任一参数不是整数,则引发 TypeError。 如果任一参数为负,则引发 ValueError。
3.8 版中的新功能。
- math.prod(iterable, *, start=1)
计算输入iterable中所有元素的乘积。 产品的默认 start 值为
1
。当可迭代对象为空时,返回起始值。 此函数专门用于数字值,可能会拒绝非数字类型。
3.8 版中的新功能。
- math.remainder(x, y)
返回 x 相对于 y 的 IEEE 754 样式余数。 对于有限 x 和有限非零 y,这是差
x - n*y
,其中n
是最接近商 [ X161X]。 如果x / y
正好位于两个连续整数的中间,则最近的 even 整数用于n
。 余数r = remainder(x, y)
因此总是满足abs(r) <= 0.5 * abs(y)
。特殊情况遵循 IEEE 754:特别是,对于任何有限 x,
remainder(x, math.inf)
是 x,并且remainder(x, 0)
和remainder(math.inf, x)
引发 [ X131X]ValueError 对于任何非 NaN x。 如果余数运算的结果为零,则该零的符号与 x 相同。在使用 IEEE 754 二进制浮点数的平台上,此操作的结果始终可以精确表示:不引入舍入误差。
3.7 版中的新功能。
- math.trunc(x)
- 返回截断为 Integral(通常是整数)的 Real 值 x。 委托给 x.__trunc__()。
- math.ulp(x)
返回浮点 x 的最低有效位的值:
如果 x 是 NaN(不是数字),则返回 x。
如果 x 为负数,则返回
ulp(-x)
。如果 x 是正无穷大,则返回 x。
如果 x 等于 0,则返回最小正 非标准化 可表示浮点数(小于最小正数 normalized 浮点数,sys.float_info.min[ X187X])。
如果 x 等于可表示的最大正浮点数,则返回 x 的最低有效位的值,使得第一个小于 x 的浮点数为 [ X182X]。
否则(x为正有限数),返回x的最低有效位的值,使得第一个大于x的浮点数为
x + ulp(x)
。
ULP 代表“最后位置的单元”。
另见 math.nextafter() 和 sys.float_info.epsilon。
3.9 版中的新功能。
请注意,frexp() 和 modf() 与它们的 C 等效项具有不同的调用/返回模式:它们采用单个参数并返回一对值,而不是返回它们的第二个通过“输出参数”返回值(Python 中没有这样的东西)。
对于 ceil()、floor() 和 modf() 函数,请注意 all 足够大的浮点数大小是精确的整数。 Python 浮点数通常不超过 53 位精度(与平台 C 双精度型相同),在这种情况下,任何带有 abs(x) >= 2**52
的浮点数 x 都必须没有小数位。
幂函数和对数函数
- math.exp(x)
- 返回 e 的 x 次幂,其中 e = 2.718281……是自然对数的底。 这通常比
math.e ** x
或pow(math.e, x)
更准确。
- math.expm1(x)
返回 e 的 x 次方减 1。 这里 e 是自然对数的底。 对于小浮点数 x,
exp(x) - 1
中的减法会导致 精度 的显着损失; expm1() 函数提供了一种方法来计算这个数量到全精度:>>> from math import exp, expm1 >>> exp(1e-5) - 1 # gives result accurate to 11 places 1.0000050000069649e-05 >>> expm1(1e-5) # result accurate to full precision 1.0000050000166668e-05
3.2 版中的新功能。
- math.log(x[, base])
使用一个参数,返回 x 的自然对数(以 e 为底)。
使用两个参数,返回 x 到给定 base 的对数,计算为
log(x)/log(base)
。
- math.log1p(x)
- 返回 1+x 的自然对数(以 e 为底)。 结果的计算方式对于接近零的 x 是准确的。
- math.log2(x)
返回 x 的以 2 为底的对数。 这通常比
log(x, 2)
更准确。3.3 版中的新功能。
也可以看看
int.bit_length() 返回表示二进制整数所需的位数,不包括符号和前导零。
- math.log10(x)
- 返回 x 的以 10 为底的对数。 这通常比
log(x, 10)
更准确。
- math.pow(x, y)
返回
x
的y
次幂。 特殊情况尽可能遵循 C99 标准的附录“F”。 特别是,pow(1.0, x)
和pow(x, 0.0)
总是返回1.0
,即使x
是零或 NaN。 如果x
和y
都是有限的,x
是负数,并且y
不是整数,那么pow(x, y)
是未定义的,并引发值错误。与内置的
**
运算符不同,math.pow() 将其两个参数都转换为类型 float。 使用**
或内置的 pow() 函数计算精确的整数幂。
- math.sqrt(x)
- 返回 x 的平方根。
三角函数
- math.acos(x)
- 以弧度为单位返回 x 的反余弦值。 结果介于
0
和pi
之间。
- math.asin(x)
- 以弧度为单位返回 x 的反正弦。 结果介于
-pi/2
和pi/2
之间。
- math.atan(x)
- 以弧度为单位返回 x 的反正切值。 结果介于
-pi/2
和pi/2
之间。
- math.atan2(y, x)
- 返回
atan(y / x)
,以弧度为单位。 结果介于-pi
和pi
之间。 平面中从原点到点(x, y)
的向量与正 X 轴形成这个角度。 atan2() 的要点是它知道两个输入的符号,因此它可以计算角度的正确象限。 例如,atan(1)
和atan2(1, 1)
都是pi/4
,但atan2(-1, -1)
是-3*pi/4
。
- math.cos(x)
- 返回 x 弧度的余弦。
- math.dist(p, q)
返回两点 p 和 q 之间的欧几里得距离,每个点作为坐标序列(或可迭代)给出。 这两个点必须具有相同的维度。
大致相当于:
sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))
3.8 版中的新功能。
- math.hypot(*coordinates)
返回欧几里得范数,
sqrt(sum(x**2 for x in coordinates))
。 这是从原点到坐标给定点的向量的长度。对于二维点
(x, y)
,这等效于使用勾股定理sqrt(x*x + y*y)
计算直角三角形的斜边。3.8 版更改: 添加了对 n 维点的支持。 以前,仅支持二维情况。
3.10 版更改: 提高算法的准确性,使最大误差低于 1 ulp(单位在最后一位)。 更典型的是,结果几乎总是正确四舍五入到 1/2 ulp 以内。
- math.sin(x)
- 返回 x 弧度的正弦值。
- math.tan(x)
- 返回 x 弧度的切线。
角度转换
- math.degrees(x)
- 将角度 x 从弧度转换为度数。
- math.radians(x)
- 将角度 x 从度数转换为弧度。
双曲函数
双曲函数 是基于双曲线而不是圆的三角函数的类似物。
- math.acosh(x)
- 返回 x 的反双曲余弦。
- math.asinh(x)
- 返回 x 的反双曲正弦值。
- math.atanh(x)
- 返回 x 的反双曲正切值。
- math.cosh(x)
- 返回 x 的双曲余弦。
- math.sinh(x)
- 返回 x 的双曲正弦值。
- math.tanh(x)
- 返回 x 的双曲正切值。
特殊功能
- math.erf(x)
在 x 处返回 错误函数 。
erf() 函数可用于计算传统的统计函数,例如 累积标准正态分布 :
def phi(x): 'Cumulative distribution function for the standard normal distribution' return (1.0 + erf(x / sqrt(2.0))) / 2.0
3.2 版中的新功能。
- math.gamma(x)
在 x 处返回 Gamma 函数 。
3.2 版中的新功能。
- math.lgamma(x)
返回 Gamma 函数在 x 处绝对值的自然对数。
3.2 版中的新功能。
常数
- math.pi
- 数学常数 π = 3.141592…,达到可用精度。
- math.e
- 数学常数 e = 2.718281…,达到可用精度。
- math.tau
数学常数 τ = 6.283185…,达到可用精度。 Tau 是一个圆常数,等于 2π,即圆的周长与其半径的比值。 要了解有关 Tau 的更多信息,请观看 Vi Hart 的视频 Pi 是(仍然)错误的 ,并开始通过吃两倍的馅饼来庆祝 Tau 日 !
3.6 版中的新功能。
- math.inf
浮点正无穷大。 (对于负无穷大,使用
-math.inf
。)相当于float('inf')
的输出。3.5 版中的新功能。
- math.nan
浮点“非数字”(NaN) 值。 相当于
float('nan')
的输出。3.5 版中的新功能。