On this page
9.2. math—math 函数
此模块始终可用。它提供对 C 标准定义的 math 函数的访问。
这些函数不能与复数一起使用。如果需要支持复数,请使用cmath模块中具有相同名称的Function。支持复数的函数与不支持复数的函数之间有区别,因为大多数用户不想学习理解复数所需的 math 知识。pass接收异常而不是复杂的结果,可以更早地检测出用作参数的意外复数,以便程序员可以首先确定其生成方式和生成原因。
该模块提供以下Function。除非另有明确说明,否则所有返回值均为浮点型。
9.2.1. 数论和表示函数
math.
ceil
(* x *)- 将* x 的上限返回为浮点型,最小整数值大于或等于 x *。
math.
copysign
(* x , y *)- 返回* x 和 y 的符号。在支持带符号零的平台上,
copysign(1.0, -0.0)
返回 -1.0 *。
- 返回* x 和 y 的符号。在支持带符号零的平台上,
2.6 版的新Function。
math.
fabs
(* x *)- 返回* x *的绝对值。
math.
factorial
(* x *)- 返回* x 阶乘。如果 x *不是整数或为负数,则加ValueError。
2.6 版的新Function。
math.
floor
(* 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 食谱。
2.6 版的新Function。
math.
isinf
(* x *)- 检查浮点* x *是正无穷还是负无穷大。
2.6 版的新Function。
math.
isnan
(* x *)- 检查浮点数* x *是否为 NaN(不是数字)。有关 NaN 的更多信息,请参见 IEEE 754 标准。
2.6 版的新Function。
math.
ldexp
(* x , i *)- 返回
x * (2**i)
。这本质上是函数frexp()的逆函数。
- 返回
math.
modf
(* x *)- 返回* x 的小数和整数部分。两个结果都带有 x *的符号,并且都是浮点数。
math.
trunc
(* x *)
2.6 版的新Function。
请注意,frexp()和modf()的调用/返回模式与 C 等效项不同:它们采用单个参数并返回Pair值,而不是pass“输出参数”返回第二个返回值(Python 中没有这样的东西) )。
对于ceil(),floor()和modf()函数,请注意,* all 浮点数足够大,都是精确的整数。 Python 浮点数通常不超过 53 位精度(与平台 C double 类型相同),在这种情况下,任何带有abs(x) >= 2**52
的浮点 x *都必须没有小数位。
9.2.2. 幂和对数函数
math.
exp
(* x *)- 返回
e**x
。
- 返回
math.
expm1
(* x *)- 返回
e**x - 1
。对于小浮点* 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
2.7 版的新Function。
math.
log
(* x * [,* base *])- 使用一个参数,返回* x 的自然对数(以 e *为底)。
使用两个参数,将* x 的对数返回给定的 base *,以log(x)/log(base)
计算。
在版本 2.3 中更改:添加了* base *参数。
math.
log1p
(* x *)- 返回* 1 x (以 e 为底)的自然对数。对 x *接近零的结果进行精确计算。
2.6 版的新Function。
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()函数来计算精确的整数幂。
在 2.6 版中进行了更改:1**nan
和nan**0
的结果未定义。
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)
,以弧度为单位。结果在-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.
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 *的反双曲余弦值。
2.6 版的新Function。
math.
asinh
(* x *)- 返回* x *的反双曲正弦值。
2.6 版的新Function。
math.
atanh
(* x *)- 返回* x *的反双曲正切值。
2.6 版的新Function。
math.
cosh
(* x *)- 返回* x *的双曲余弦值。
math.
sinh
(* x *)- 返回* x *的双曲正弦值。
math.
tanh
(* x *)- 返回* x *的双曲正切值。
9.2.6. 特殊Function
math.
erf
(* x *)- 返回错误函数* x *。
2.7 版的新Function。
math.
erfc
(* x *)- 返回* x *处的互补误差函数。
2.7 版的新Function。
math.
gamma
(* x *)- 在* x *返回 Gamma 函数。
2.7 版的新Function。
math.
lgamma
(* x *)- 返回 Gamma 函数绝对值在* x *处的自然对数。
2.7 版的新Function。
9.2.7. Constants
math.
pi
- math 常数π= 3.141592…,以达到可用的精度。
math.
e
- math 常数 e = 2.718281…,以可用的精度为准。
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 视为安静。
在 2.6 版中进行了更改:特殊情况下的行为现在旨在遵循 C99 附录 F。在 Python 的早期版本中,宽松地规定了特殊情况下的行为。
See also
Module cmath
其中许多Function的复数版本。