math ——数学函数


此模块提供对C标准定义的数学函数的访问。

这些函数不能与复数一起使用;请使用 cmath 模块,如果需要对复数的支持。支持复数的函数和不支持复数的函数之间的区别是因为大多数用户不想学习理解复数所需的数学知识。接收异常而不是复杂的结果允许更早地检测用作参数的意外复数,这样程序员就可以首先确定生成异常的方式和原因。

本模块提供以下功能。除非另有明确说明,否则所有返回值都是浮动的。

数论与表示函数

math.ceil(x)

返回的上限 x ,大于或等于的最小整数 x .如果 x 不是浮点型,委托给 x.__ceil__() ,应该返回 Integral 价值。

math.comb(n, k)

返回选择的方法数 k 项目来自 n 没有重复和顺序的项目。

计算结果为 n! / (k! * (n - k)!) 什么时候? k <= nk > n .

也被称为二项式系数,因为它在多项式展开式中等价于k项的系数。 (1 + x) ** n .

加薪 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 作为整数的阶乘。加薪 ValueError 如果 x 不是整数或是负数。

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 相反,对于float参数,和可能不是完全可计算的。例如, fmod(-1e-100, 1e100)-1e-100 但是python的结果 -1e-100 % 1e1001e100-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)

返回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 cookbook recipes for accurate floating point summation

math.gcd(*integers)

返回指定整数参数的最大公约数。如果任何参数为非零,则返回值是最大的正整数,它是所有参数的除数。如果所有参数都为零,则返回值为 0gcd() 不带参数返回 0

3.5 新版功能.

在 3.9 版更改: 添加了对任意数量参数的支持。以前,只支持两个参数。

math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

返回 True 如果值 ab 彼此靠近 False 否则。

根据给定的绝对和相对公差确定两个值是否接近。

rel_tol 是相对公差——是 ab ,相对于 ab . 例如,要设置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) .

IEEE 754特殊值 NaNinf-inf 将根据IEEE规则进行处理。明确地, NaN 不被认为接近任何其他价值,包括 NaN . inf-inf 只被认为接近自己。

3.5 新版功能.

参见

PEP 485 --一个检验近似相等性的函数

math.isfinite(x)

返回 True 如果 x 既不是无穷大也不是NaN,并且 False 否则。(注意 0.0 is 被认为是有限的。)

3.2 新版功能.

math.isinf(x)

返回 True 如果 x 是正无穷大或负无穷大,并且 False 否则。

math.isnan(x)

返回 True 如果 x 是NaN(不是数字),并且 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)

返回选择的方法数 k 项目来自 n 没有重复和顺序的项目。

计算结果为 n! / (n - k)! 什么时候? k <= nk > n .

如果 k 未指定或无,则 k 默认为 n 函数返回 n! .

加薪 TypeError 如果其中一个参数不是整数。加薪 ValueError 如果其中一个参数为负。

3.8 新版功能.

math.prod(iterable, *, start=1)

计算输入中所有元素的乘积 可迭代的 .违约 开始 产品价值为 1 .

当iterable为空时,返回起始值。此函数专门用于数值,可能会拒绝非数值类型。

3.8 新版功能.

math.remainder(x, y)

返回 x 关于 y . 为有限 x 和有限非零 y ,这就是区别 x - n*y 在哪里 n 是最接近商的精确值的整数 x / y . 如果 x / y 正好是两个连续整数的中间,最近的 even 整数用于 n . 余数 r = remainder(x, y) 所以总是满足 abs(r) <= 0.5 * abs(y) .

特殊情况遵循IEEE754:特别是, remainder(x, math.inf)x 对于任何有限的 xremainder(x, 0)remainder(math.inf, x) 引发 ValueError 对于任何非南 x . 如果余数运算的结果为零,则该零的符号与 x .

在使用IEEE754二进制浮点的平台上,此操作的结果总是完全可表示的:不引入舍入误差。

3.7 新版功能.

math.trunc(x)

返回 Real 价值 x 截断到 Integral (通常是整数)。代表参加 x.__trunc__() .

math.ulp(x)

返回浮点的最低有效位的值 x

  • 如果 x 是NaN(不是数字),返回 x .

  • 如果 x 是负数,返回 ulp(-x) .

  • 如果 x 是正无穷大,返回 x .

  • 如果 x 等于零,返回最小的正数 规格化 可表示浮点数(小于最小正数 归一化 飘浮, sys.float_info.min

  • 如果 x 等于最大的正可表示浮点,返回 x ,使第一个浮点小于 xx - ulp(x) .

  • 否则( x 是一个正的有限数),返回 x ,因此第一个浮点数大于 xx + ulp(x) .

ULP代表“最后的单位”。

也见 math.nextafter()sys.float_info.epsilon .

3.9 新版功能.

注意 frexp()modf() 与它们的C等价物相比,具有不同的调用/返回模式:它们接受一个参数并返回一对值,而不是通过“输出参数”返回它们的第二个返回值(在Python中没有这种情况)。

对于 ceil()floor()modf() 功能,注意 all 足够大的浮点数是精确的整数。python浮点数的精度通常不超过53位(与平台c double类型相同),在这种情况下,任何浮点数 x 具有 abs(x) >= 2**52 一定没有小数位。

幂函数和对数函数

math.exp(x)

返回 e 引发到*x*次方在哪里 e = 2.718281…是自然对数的底。这通常比 math.e ** xpow(math.e, x) .

math.expm1(x)

返回 e 引发到*x*次方减去1。在这里 e 是自然对数的底。对于小浮球 x ,中的减法 exp(x) - 1 可能导致 significant loss of precisionexpm1() 函数提供了一种将此数量计算为完全精度的方法:

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

返回以2为底的对数 x . 这通常比 log(x, 2) .

3.3 新版功能.

参见

int.bit_length() 返回用二进制表示整数所需的位数,不包括符号和前导零。

math.log10(x)

返回以10为底的对数 x . 这通常比 log(x, 10) .

math.pow(x, y)

返回 xy``次方 .  例外情况应尽可能遵循C99标准的附录F。特别地, ``pow(1.0, x)pow(x, 0.0) 总是返回 1.0 ,即使在 x 是零还是NaN。如果两者都是 xy 是有限的, x 为负,并且 y 不是整数,则 pow(x, y) 未定义,并引发 ValueError .

不像内置的 ** 运算符, math.pow() 将其两个参数转换为类型 float . 使用 ** 或内置 pow() 用于计算精确整数幂的函数。

math.sqrt(x)

返回的平方根 x .

三角函数

math.acos(x)

返回的弧余弦 x 以弧度表示。结果介于 0pi .

math.asin(x)

返回的弧正弦值 x 以弧度表示。结果介于 -pi/2pi/2 .

math.atan(x)

返回的弧正切 x 以弧度表示。结果介于 -pi/2pi/2 .

math.atan2(y, x)

返回 atan(y / x) 以弧度表示。结果介于 -pipi . 平面中从原点到点的向量 (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)

返回两点之间的欧氏距离 pq ,每一个作为坐标序列(或可迭代)给出。这两点的尺寸必须相同。

大致相当于:

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 版更改: 提高了算法的精度,使最大误差小于1ulp。更典型的是,结果几乎总是正确地四舍五入到1/2 ulp以内。

math.sin(x)

返回的正弦值 x 弧度。

math.tan(x)

返回的正切值 x 弧度。

角度转换

math.degrees(x)

转换角 x 从弧度到度。

math.radians(x)

转换角 x 从度到弧度。

双曲函数

Hyperbolic functions 是基于双曲线而不是圆的三角函数的类似物。

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)

返回 error functionx .

这个 erf() 函数可用于计算传统的统计函数,如 cumulative standard normal distribution ::

def phi(x):
    'Cumulative distribution function for the standard normal distribution'
    return (1.0 + erf(x / sqrt(2.0))) / 2.0

3.2 新版功能.

math.erfc(x)

返回互补误差函数 x . 这个 complementary error function 定义为 1.0 - erf(x) . 它用于 x 其中一个减法将导致 loss of significance

3.2 新版功能.

math.gamma(x)

返回 Gamma functionx .

3.2 新版功能.

math.lgamma(x)

返回γ函数绝对值的自然对数 x .

3.2 新版功能.

常量

math.pi

数学常数 π =3.141592…,达到可用精度。

math.e

数学常数 e =2.718281…,达到可用精度。

math.tau

数学常数 τ =6.283185…,达到可用精度。tau是一个等于2的圆常数π 圆的周长与半径之比。要了解更多关于tau的信息,请查看vi hart的视频 Pi is (still) Wrong 开始庆祝 Tau day 吃两倍的馅饼!

3.6 新版功能.

math.inf

浮点正无穷大。(对于负无穷大,使用 -math.inf )相当于 float('inf') .

3.5 新版功能.

math.nan

浮点“非数字”(NaN)值。相当于 float('nan') .

3.5 新版功能.

CPython implementation detail: 这个 math 模块主要由围绕平台C数学库函数的薄封装器组成。特殊情况下的行为在适当情况下遵循C99标准的附录F。目前的实施将提高 ValueError 对于诸如 sqrt(-1.0)log(0.0) (其中,C99附录F建议信号无效操作或除以零),以及 OverflowError 对于溢出的结果(例如, exp(1000.0) )除非一个或多个输入参数是NaN,否则不会从上述任何函数返回NaN;在这种情况下,大多数函数都将返回NaN,但(同样遵循C99附录F)该规则有一些例外,例如 pow(float('nan'), 0.0)hypot(float('nan'), float('inf')) .

请注意,python不努力区分发信号的nan和安静的nan,而发信号的nan的行为仍然是未知的。典型的行为是把所有的NaNs都当作安静的人对待。

参见

模块 cmath

其中许多函数的复数版本。