On this page
math—math 函数
该模块提供对 C 标准定义的 math 函数的访问。
这些函数不能与复数一起使用。如果需要支持复数,请使用cmath模块中具有相同名称的Function。支持复数的函数与不支持复数的函数之间有区别,因为大多数用户不想学习理解复数所需的 math 知识。pass接收异常而不是复杂的结果,可以更早地检测出用作参数的意外复数,以便程序员可以首先确定其生成方式和生成原因。
该模块提供以下Function。除非另有明确说明,否则所有返回值均为浮点型。
数论和表示函数
math.ceil(* x *)- 返回* x 的上限,大于或等于 x 的最小整数。如果 x *不是浮点数,则委派给
x.__ceil__(),该参数应返回Integral值。
- 返回* x 的上限,大于或等于 x 的最小整数。如果 x *不是浮点数,则委派给
math.comb(* n , k *)- 返回从* n 个项目中选择 k *个项目的方式数量,而无需重复且无 Sequences。
当k <= n时评估为n! / (k! * (n - k)!),当k > n时评估为零。
也称为二项式系数,因为它等效于表达式(1 + x) ** n的多项式展开式中的第 k 个项的系数。
如果两个参数中的任何一个都不为整数,则引发TypeError。如果其中一个参数为负数,则加ValueError。
3.8 版的新Function。
math.copysign(* x , y *)- 返回一个浮点数,其大小(绝对值)为* x ,但符号为 y 。在支持带符号零的平台上,
copysign(1.0, -0.0)返回 -1.0 *。
- 返回一个浮点数,其大小(绝对值)为* x ,但符号为 y 。在支持带符号零的平台上,
math.fabs(* x *)- 返回* x *的绝对值。
math.factorial(* x *)- 以整数形式返回* x 阶乘。如果 x *不是整数或为负数,则加ValueError。
math.floor(* x *)- 返回* x 的下限,即小于或等于 x 的最大整数。如果 x *不是浮点数,则委派给
x.__floor__(),该参数应返回Integral值。
- 返回* x 的下限,即小于或等于 x 的最大整数。如果 x *不是浮点数,则委派给
math.fmod(* x , y *)- 返回
fmod(x, y),由平台 C 库定义。请注意,Python 表达式x % y可能不会返回相同的结果。 C 标准的意图是,对于某个整数* n ,fmod(x, y)精确地(在 math 上;以无穷的精度)等于x - n*y,使得结果的符号与 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。这用于以便携式方式“分离”浮标的内部表示。
- 返回* x *的尾数和指数作为对
math.fsum(可迭代)- 返回迭代器中值的准确浮点和。pass跟踪多个中间部分和来避免精度损失:
>>> 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(* a , b *)- 返回整数* a 和 b 的最大公约数。如果 a 或 b 都不为零,则
gcd(a, b)的值是将 a 和 b *均除的最大正整数。gcd(0, 0)返回0。
- 返回整数* a 和 b 的最大公约数。如果 a 或 b 都不为零,则
3.5 版中的新Function。
math.isclose(* a , b ,**,* rel_tol = 1e-09 , abs_tol = 0.0 *)- 如果值* a 和 b *彼此接近,则返回
True,否则返回False。
- 如果值* a 和 b *彼此接近,则返回
根据给定的绝对和相对公差确定两个值是否接近。
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 版中的新Function。
See also
PEP 485 –测试近似相等的函数
math.isfinite(* x *)- 如果* x *既不是无穷也不是 NaN,则返回
True,否则返回False。 (请注意,0.0*被认为是有限的.)
- 如果* x *既不是无穷也不是 NaN,则返回
3.2 版中的新Function。
math.isinf(* x *)- 如果* x *是正或负无穷大,则返回
True,否则返回False。
- 如果* x *是正或负无穷大,则返回
math.isnan(* x *)- 如果* x *是 NaN(不是数字),则返回
True,否则返回False。
- 如果* x *是 NaN(不是数字),则返回
math.isqrt(* n *)- 返回非负整数* n 的整数平方根。这是 n 的确切平方根的下限,或者等效地是最大整数 a ,这样 a ²≤ n *。
对于某些应用,使用最小整数* a 使得 n ≤ a ²,换句话说,就是 n 的确切平方根的上限,可能更方便。对于正 n *,可以使用a = 1 + isqrt(n - 1)进行计算。
3.8 版的新Function。
math.ldexp(* x , i *)- 返回
x * (2**i)。这本质上是函数frexp()的逆函数。
- 返回
math.modf(* x *)- 返回* x 的小数和整数部分。两个结果都带有 x *的符号,并且都是浮点数。
math.perm(* n , k = None *)- 返回从* n 个项目中选择 k *个项目(不重复且有 Sequences)的数量。
当k <= n时评估为n! / (n - k)!,当k > n时评估为零。
如果未指定* k 或为 None,则 k 默认为 n *,该函数返回n!。
如果两个参数中的任何一个都不为整数,则引发TypeError。如果其中一个参数为负数,则加ValueError。
3.8 版的新Function。
math.prod(* iterable ,**,* start = 1 *)- 计算 Importing* iterable 中所有元素的乘积。产品的默认 start *值为
1。
- 计算 Importing* iterable 中所有元素的乘积。产品的默认 start *值为
当 iterable 为空时,返回起始值。该函数专门用于数字值,并且可以拒绝非数字类型。
3.8 版的新Function。
math.remainder(* x , y *)- 返回关于* y 的 IEEE 754 样式 x 的余数。对于有限 x 和有限非零 y ,这是差异
x - n*y,其中n是最接近商x / y的精确值的整数。如果x / y正好位于两个连续整数之间,则n使用最接近的 even *整数。因此,其余的r = remainder(x, y)总是满足abs(r) <= 0.5 * abs(y)。
- 返回关于* y 的 IEEE 754 样式 x 的余数。对于有限 x 和有限非零 y ,这是差异
特殊情况遵循 IEEE 754:特别是,对于任何有限* x ,remainder(x, math.inf)是 x *,对于任何非 NaN * x ,remainder(x, 0)和remainder(math.inf, x)会提高ValueError。如果余数运算的结果为零,则该零将具有与 x *相同的符号。
在使用 IEEE 754 二进制浮点的平台上,此操作的结果始终可以准确表示:不引入舍入错误。
3.7 版中的新Function。
请注意,frexp()和modf()的调用/返回模式与 C 等效项不同:它们采用单个参数并返回Pair值,而不是pass“输出参数”返回第二个返回值(Python 中没有这样的东西) )。
对于ceil(),floor()和modf()函数,请注意,* all 浮点数足够大,都是精确的整数。 Python 浮点数通常不超过 53 位精度(与平台 C double 类型相同),在这种情况下,任何带有abs(x) >= 2**52的浮点 x *都必须没有小数位。
幂和对数函数
math.exp(* x *)- 将* e 提高到幂 x ,其中 e * = 2.718281…是自然对数的底数。通常比
math.e ** x或pow(math.e, x)更准确。
- 将* e 提高到幂 x ,其中 e * = 2.718281…是自然对数的底数。通常比
math.expm1(* x *)
>>> 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 版中的新Function。
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)更准确。
- 返回* x *的以 2 为底的对数。通常比
版本 3.3 中的新Function。
See also
int.bit_length()返回表示二进制整数所需的位数,不包括符号和前导零。
math.log10(* x *)- 返回* x *的以 10 为底的对数。通常比
log(x, 10)更准确。
- 返回* x *的以 10 为底的对数。通常比
math.pow(* x , y *)- 将
x提升为幂y。exceptions 请尽可能遵循 C99 标准的附件“ F”。特别是pow(1.0, x)和pow(x, 0.0)始终返回1.0,即使x为零或 NaN。如果x和y都是有限的,x为负,并且y不是整数,则pow(x, y)是未定义的,并引发ValueError。
- 将
与内置**运算符不同,math.pow()将其两个参数都转换为float类型。使用**或内置的pow()函数来计算精确的整数幂。
math.sqrt(* x *)- 返回* x *的平方根。
Trigonometric functions
math.acos(* x *)- 返回弧度的* x *的反余弦值。
math.asin(* x *)- 返回弧度的* x *的反正弦值。
math.atan(* x *)- 返回弧度的* x *的反正切值。
math.atan2(* y , x *)- 返回
atan(y / x),以弧度为单位。结果在-pi和pi之间。平面中从原点到(x, y)点的向量与 X 轴正方向成此角度。 atan2()的要点是它知道两个 Importing 的正负号,因此它可以计算角度的正确象限。例如,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 版的新Function。
math.hypot(*坐标)- 返回欧几里得范数
sqrt(sum(x**2 for x in coordinates))。这是从原点到坐标给定点的矢量长度。
- 返回欧几里得范数
对于二维点(x, y),这等效于使用勾股定理sqrt(x*x + y*y)计算直角三角形的斜边。
在 3.8 版中进行了更改:添加了对 n 维点的支持。以前,仅支持二维情况。
math.sin(* x *)- 返回* x *弧度的正弦值。
math.tan(* x *)- 返回* x *弧度的切线。
Angular conversion
math.degrees(* x *)- 将角度* x *从弧度转换为度。
math.radians(* x *)- 将角度* x *从度转换为弧度。
Hyperbolic functions
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 *的双曲正切值。
Special functions
math.erf(* x *)- 返回error function在* 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 版中的新Function。
3.2 版中的新Function。
math.gamma(* x *)- 返回Gamma function在* x *处。
3.2 版中的新Function。
math.lgamma(* x *)- 返回 Gamma 函数绝对值在* x *处的自然对数。
3.2 版中的新Function。
Constants
math.pi- math 常数π = 3.141592…,以可用的精度表示。
math.e- math 常数* e * = 2.718281…,以可用的精度为准。
math.tau- math 常数τ = 6.283185…,以可用的精度表示。 Tau 是等于 2 π的圆常数,即圆的周长与其半径之比。要了解有关 Tau 的更多信息,请观看 Vi Hart 的视频Pi 是(仍然)错误,并pass吃两倍的馅饼开始庆祝Tau day!
3.6 版的新Function。
math.inf- 浮点正无穷大。 (对于负无穷大,请使用
-math.inf.)等效于float('inf')的输出。
- 浮点正无穷大。 (对于负无穷大,请使用
3.5 版中的新Function。
math.nan- 浮点“非数字”(NaN)值。等效于
float('nan')的输出。
- 浮点“非数字”(NaN)值。等效于
3.5 版中的新Function。
CPython 实现细节: math模块主要由围绕平台 Cmath 库函数的瘦包装组成。特殊情况下的行为应遵循 C99 标准的附录 F。当前实现将针对sqrt(-1.0)或log(0.0)之类的无效操作(其中 C99 附录 F 建议用 signal 表示无效操作或除零)将ValueError,对于溢出的结果(例如exp(1000.0))将提高OverflowError。除非一个或多个 Importing 参数是 NaN,否则上述任何一个函数都不会返回 NaN;在这种情况下,大多数函数将返回 NaN,但是(同样遵循 C99 附录 F)此规则有一些 exception,例如pow(float('nan'), 0.0)或hypot(float('nan'), float('inf'))。
请注意,Python 不会努力将发 signal 的 NaN 与安静的 NaN 区分开,并且发 signal 的 NaN 行为仍未指定。典型的行为是将所有 NaN 视为安静。
See also
Module cmath
其中许多Function的复数版本。