该模块始终可用。它提供对C标准定义的数学函数的访问。

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

该模块提供以下功能。除非另有明确说明,否则所有返回值均为浮点数。

数论和表示函数

math.ceil(x)
返回 x 的上限,即大于或等于 x 的最小整数。 如果 x 不是浮点数,则委托给 x.__ceil__(),它应该返回一个 Integral 值。
math.copysign(x, y)
返回一个浮点数,其大小(绝对值)为 x,但符号为 y。 在支持有符号零的平台上,copysign(1.0, -0.0) 返回 -1.0。
math.fabs(x)
返回x的绝对值。
math.factorial(x)
以整数形式返回 x 阶乘。 如果 x 不是整数或为负,则引发 ValueError。
math.floor(x)
返回 x 的下限,即小于或等于 x 的最大整数。 如果 x 不是浮点数,则委托给 x.__floor__(),它应该返回一个 Integral 值。
math.fmod(x, y)
返回 fmod(x, y),由平台 C 库定义。 请注意,Python 表达式 x % y 可能不会返回相同的结果。 C 标准的意图是 fmod(x, y) 对于某个整数 n 精确(数学上;到无限精度)等于 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。这用于以可移植的方式“分离”浮点数的内部表示。
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(a, b)
返回整数 a 和 b 的最大公约数。 如果 a 或 b 不为零,则 gcd(a, b) 的值是除 a 和 b 的最大正整数。 gcd(0, 0) 返回 0。

3.5 版中的新功能。

math.isclose(ab*rel_tol=1e-09abs_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 版中的新功能。

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

3.2 版中的新功能。

math.isinf(x)
如果 x 是正无穷或负无穷,则返回 True,否则返回 False。
math.isnan(x)
如果 x 是 NaN(不是数字),则返回 True,否则返回 False。
math.ldexp(x, i)
返回 x * (2**i)。 这本质上是函数 frexp() 的逆函数。
math.modf(x)
返回 x 的小数和整数部分。 两个结果都带有 x 的符号并且是浮点数。
math.remainder(x, y )
返回 x 相对于 y 的 IEEE 754 样式余数。 对于有限 x 和有限非零 y,这是 x – n*y 的差值,其中 n 是与商 x / y 的精确值最接近的整数。 如果 x / y 正好在两个连续整数的中间,则使用最接近的偶数表示 n。 因此,余数 r = 余数(x,y)总是满足 abs(r) <= 0.5 * abs(y)。

特殊情况遵循 IEEE 754:特别是,对于任何有限 x,remainder(x, math.inf) 是 x,对于任何非 NaN x,remainder(x, 0) 和 remaining(math.inf, x) 会引发 ValueError。 如果余数运算的结果为零,则该零的符号与 x 相同。

在使用 IEEE 754 二进制浮点的平台上,此操作的结果始终可以精确表示:不引入舍入误差。

3.7 版中的新功能。

math.trunc(x)
返回截断为整数(通常是整数)的实数值 x。 委托给 x.__trunc__()。

请注意, frexp() 和 modf() 与它们的 C 等效项具有不同的调用/返回模式:它们采用单个参数并返回一对值,而不是通过“输出参数”返回它们的第二个返回值(没有 Python中的这种东西)。

对于 ceil()、floor() 和 modf() 函数,请注意所有足够大的浮点数都是精确整数。 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 的对数返回给定底数,计算方式为 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) 是未定义的,并引发 ValueError。

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

math.sqrt(x)
返回x的平方根。

三角函数

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() 的要点是它知道两个输入的符号,因此它可以计算角度的正确象限。 例如,atan(1) 和 atan2(1, 1) 都是 pi/4,但 atan2(-1, -1) 是 -3*pi/4。
math.cos(x)
返回 x 弧度的余弦。
math.hypot(x, y)
返回欧几里得范数 sqrt(x*x + y*y)。 这是从原点到点 (x, y) 的向量的长度。
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.erfc(x)
返回x处的互补误差函数。的互补误差函数被定义为 。它用于x的大值,其中从1减去会导致重要性的损失。1.0 - erf(x)

版本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 is (still) Wrong,并开始通过吃两倍的馅饼来庆祝 Tau 日!

3.6 版中的新功能。

math.inf
浮点正无穷大。 (对于负无穷大,使用 -math.inf。)等效于 float(‘inf’) 的输出。

3.5 版中的新功能。

math.nan
浮点“非数字”(NaN) 值。 相当于 float(‘nan’) 的输出。

3.5 版中的新功能。

CPython 实现细节:数学模块主要由围绕平台 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’), 浮动(’inf’))。

请注意,Python 没有努力区分信号 NaN 和安静 NaN,并且信号 NaN 的行为仍未指定。 典型的行为是将所有 NaN 视为安静。

也可以看看

Module cmath
许多这些功能的复数版本。