Skip to main content

9.2. math —数学函数


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

这些函数不能与复数一起使用;如果需要支持复杂数字,请使用 cmath 模块中相同名称的函数。支持复数的函数和不是复数的函数之间的区别是因为大多数用户不想学习相当多的数学来理解复数。接收异常而不是复杂结果允许更早地检测用作参数的未预期的复数,使得程序员可以确定首先如何以及为什么生成它。

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

9.2.1. 数理论和表示函数

math.ceil(x)

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

math.copysign(x, y)

返回一个具有 x 的大小(绝对值)但是 y 的符号的浮点数。在支持带符号零的平台上,copysign(1.0, -0.0) 返回 -1.0

math.fabs(x)

返回 x 的绝对值。

math.factorial(x)

返回 x factorial。如果 x 不是积分或负数,则提高 ValueError

math.floor(x)

返回 x 的最低层,最小的整数小于或等于 x。如果 x 不是浮点,则委派给 x.__floor__()x.__floor__() 应该返回 Integral 值。

math.fmod(x, y)

返回 fmod(x, y),由平台C库定义。请注意,Python表达式 x % y 可能不会返回相同的结果。 C标准的目的是对于一些整数 nfmod(x, y) 准确地(数学上到无限精度)等于 x - n*y,使得结果具有与 x 相同的符号,并且幅度小于 abs(y)。 Python的 x % y 返回一个带有 y 符号的结果,并且可能不能精确计算float参数。例如,fmod(-1e-100, 1e100)-1e-100,但是Python的 -1e-100 % 1e100 的结果是 1e100-1e-100,它不能被完全表示为float,并且转换到令人惊讶的 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)

返回整数 ab 的最大公约数。如果 ab 为非零,则 gcd(a, b) 的值是除以 ab 两者的最大正整数。 gcd(0, 0) 返回 0

3.5 新版功能.

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

如果值 ab 彼此接近,则返回 True,否则返回 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 不被认为接近任何其他值,包括 NaNinf-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.ldexp(x, i)

返回 x * (2**i)。这基本上是函数 frexp() 的逆。

math.modf(x)

返回 x 的小数和整数部分。两个结果携带 x 的符号并且是浮点。

math.trunc(x)

返回 Realx 截断为 Integral (通常为整数)。代表参加 x.__trunc__()

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

对于 ceil()floor()modf() 函数,请注意,足够大幅度的 all 浮点数是精确的整数。 Python浮点通常不会超过53位的精度(与平台C双精度类型相同),在这种情况下,具有 abs(x) >= 2**52 的任何浮点 x 必然不具有小数位。

9.2.2. 功率和对数函数

math.exp(x)

返回 e**x

math.expm1(x)

返回 e**x - 1。对于小浮标 xexp(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。特别地,即使当 x 是零或NaN时,pow(1.0, x)pow(x, 0.0) 也总是返回 1.0。如果 xy 都是有限的,则 x 是负的,并且 y 不是整数,则 pow(x, y) 是未定义的,并且提高 ValueError

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

math.sqrt(x)

返回 x 的平方根。

9.2.3. 三角函数

math.acos(x)

返回 x 的反余弦,以弧度表示。

math.asin(x)

返回 x 的弧度,以弧度表示。

math.atan(x)

返回 x 的反正切值,以弧度表示。

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.hypot(x, y)

返回欧几里德范数,sqrt(x*x + y*y)。这是从原点到点 (x, y) 的向量的长度。

math.sin(x)

返回 x 弧度的正弦值。

math.tan(x)

返回 x 弧度的正切值。

9.2.4. 角转换

math.degrees(x)

将角度 x 从弧度转换为度。

math.radians(x)

将角度 x 从度转换为弧度。

9.2.5. 双曲线函数

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

math.acosh(x)

返回 x 的反双曲余弦值。

math.asinh(x)

返回 x 的反双曲正弦值。

math.atanh(x)

返回 x 的反双曲正切。

math.cosh(x)

返回 x 的双曲余弦值。

math.sinh(x)

返回 x 的双曲正弦值。

math.tanh(x)

返回 x 的双曲正切值。

9.2.6. 特殊功能

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 的补偿误差函数。 互补误差函数 被定义为 1.0 - erf(x)。它用于大值 x,其中从一个减法将导致 失去意义

3.2 新版功能.

math.gamma(x)

x 返回 伽玛函数

3.2 新版功能.

math.lgamma(x)

返回 x 上Gamma函数的绝对值的自然对数。

3.2 新版功能.

9.2.7. 常量

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 新版功能.

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

注意,Python不努力区分信号NaNs和安静的NaNs,和信号NaNs的行为保持未指定。典型的行为是治疗所有的NaNs,如同他们是安静的。

参见

模块 cmath

这些函数的复数版本。