这一篇主要讲解math模块里面的所有函数。
math模块中的固定常数
标记 | 具体数值 | 说明 |
---|---|---|
math.e | 2.718281828459045 | 自然常数 |
math.pi | 3.141592653589793 | 圆周率 |
math.inf | - | 无穷大 |
math.nan | - | not a number(不是一个数值) |
math.tau | 6.283185307179586 | 圆周率的两倍 |
取整函数
- math.ceil(x) 向上取整
>>> math.ceil(1.2)
2
- math.floor(x) 向下取整
>>> math.floor(1.2)
1
注:四舍五入是用python内置函数round()
各种函数
- math.pow(x, y) x的y次方
>>> math.pow(2, 3)
8.0
- math.log(x[, base]) 计算x的对数,base为底数,默认为e
>>> math.log(math.e)
1.0
>>> math.log(100, 10)
2.0
- math.log2(x) 比
log(x, 2)
更准确
>>> math.log2(8)
3.0
- math.log10(x) 比
log(x, 10)
更准确
>>> math.log10(100)
2.0
- math.log1p() 相当于
log(x+1)
>>> math.log1p(math.e-1)
1.0
- math.sqrt(x) 计算x的平方根
>>> math.sqrt(4)
2.0
- math.hypot(x, y) 返回欧几里得范数,与(0,0)之间的距离
>>> math.hypot(3, 4)
5.0
- math.exp(x) 计算e的x次方
>>> math.exp(math.log(1))
1.0
- math.expm1(x) 相当于
math.exp(x)-1
>>> math.expm1(math.log(1))
0.0
- math.fabs(x) 返回x的绝对值
>>> math.fabs(-2)
2.0
注:相当于abs(x)
,推荐使用内置函数abs()
- math.copysign(x, y) 返回一个浮点数,其大小(绝对值)为x,但符号为y。
>>> math.copysign(1.0, -0.0)
-1.0
- math.factorial(x) 返回x的阶乘。如果x不是整数或是负数,则引发ValueError
>>> math.factorial(5)
120
>>> math.factorial(-5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: factorial() not defined for negative values
- math.fmod(x, y) 返回
x/y
的余数,相当于x%y
>>> math.fmod(9, 2)
1.0
- math.frexp(x) 返回一个元组(m, n),满足
x = m * 2 ** (n)
>>> math.frexp(5)
(0.625, 3)
- math.ldexp(x, i) 返回
x * (2 ** i)
,是frexp()函数的反函数
>>> math.ldexp(0.625, 3)
5.0
- math.fsum(iterable) 返回迭代中的精确浮点值。通过跟踪多个中间部分来避免精度损失
>>> sum([.1, .1, .1, .1, .1, .1, .1,.1, .1, .1])
0.9999999999999999
>>> math.fsum([.1, .1, .1, .1, .1, .1, .1,.1, .1, .1])
1.0
- math.gcd(a, b) 返回整数a和b的最大公约数。如果a或b非零,那么值是最大的正整数。
>>> math.gcd(54, 72)
18
- math.modf(x) 返回x的小数部分和整数部分
>>> math.modf(1.2)
(0.19999999999999996, 1.0)
- math.remainder(x, y)
r = remainder(x, y)
满足abs(r) <= 0.5 * abs(y)
由于自己电脑上安装的是3.6.5版本的python,所以无法演示。
注:3.7的新功能
- math.trunc(x) 返回x的整数部分
>>> math.trunc(math.pi)
3
判断型函数(返回bool类型)
- math.isclose(a, b, *, rel_tol =1e-09, abs_tol = 0.0) a,b的值接近则返回True,否则返回False。
rel_tol是相对容差,它是a和b之间允许的最大差值,默认为1e-09,必须大于零。5%的容差写为rel_tol=0.05。
abs_tol最小绝对容差,对于接近零的比较有用,abs_tol至少为零。
>>> math.isclose(1.0, 1.00001)
False
>>> math.isclose(1.0, 1.0000000001)
True
- math.isfinite(x) 如果x既不是无穷大也不是nan, 则返回True
>>> math.isfinite(math.inf)
False
>>> math.isfinite(math.nan)
False
>>> math.isfinite(False)
True
>>> math.isfinite(0.0)
True
注:0.0被认为是有限的。
- math.isinf(x) 如果x是为无穷大则返回True,其他返回False。
>>> math.isinf(math.inf)
True
>>> math.isinf(-math.inf)
True
- math.isnan(x) 如果x为NaN则返回True,否则返回False。
>>> math.isnan(math.nan)
True
>>> math.isnan(math.inf)
False
三角函数以及相关的函数
函数 | 说明 |
---|---|
math.sin(x) | 求x的正弦 |
math.cos(x) | 求x的余弦 |
math.tan(x) | 求x的正切 |
math.asin(x) | 求x的反正弦 |
math.acos(x) | 求x的反余弦 |
math.atan(x) | 求x的反正切 |
math.atan2(y, x) | 返回y/x 的反正切 |
注:参数以弧度为单位(radian)
双曲函数
函数 | 说明 |
---|---|
math.sinh(x) | 求x的双曲正弦 |
math.cosh(x) | 求x的双曲余弦 |
math.tanh(x) | 求x的双曲正切 |
math.asinh(x) | 求x的反双曲正弦 |
math.acosh(x) | 求x的反双曲余弦 |
math.atanh(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的互补误差函数。相当于
1.0 - erf(x)
-
math.gamma(x) 返回x的Gamma函数
>>> math.gamma(3)
2.0
- math.lgamma(x) 返回Gamma函数的绝对值的自然对数,相当于
log(math.gamma(x))
>>> math.exp(math.lgamma(3))
1.9999999999999993 #不是2目测是因为误差原因
角度与弧度转换
- math.degrees(x) 将x从弧度转成角度
>>> math.degrees(2*math.pi)
360.0
- math.radians(x) 将x从角度转换成弧度
>>> math.radians(360)
6.283185307179586 #相当于2*pi
注:版本3.2中的新功能