math
模块是Python
的内置模块,提供了许多对浮点数的数学运算函数。
作用
返回大于或等于指定数字的最小整数。
语法
math.ceil(x)
参数
x
:数字,整数或浮点数示例
import math
# 浮点数向上取整
print(math.ceil(1.4)) # 输出: 2
print(math.ceil(1.0)) # 输出: 1
print(math.ceil(-0.5)) # 输出: 0
# 整数向上取整
print(math.ceil(5)) # 输出: 5
print(math.ceil(-5)) # 输出: -5
作用
返回不大于给定数字的最大整数。
语法
math.floor(x)
参数
x
:数字,整数或浮点数示例
import math
# 对于正数,返回小于或等于该数的最大整数
print(math.floor(3.8)) # 输出: 3
# 对于负数,返回小于或等于该数的最大整数
print(math.floor(-2.3)) # 输出: -3
# 对于整数,返回相同的整数
print(math.floor(5)) # 输出: 5
# 对于零,返回零
print(math.floor(0.0)) # 输出: 0
作用
返回数字的绝对值。
语法
math.fabs(x)
参数
x
:数字,整数或浮点数示例
import math
# 计算整数的绝对值
print(math.fabs(-5)) # 输出: 5
# 计算浮点数的绝对值
print(math.fabs(3.14159)) # 输出: 3.14159
# 计算负浮点数的绝对值
print(math.fabs(-2.71828)) # 输出: 2.71828
# 计算零的绝对值
print(math.fabs(0)) # 输出: 0.0
作用
将一个浮点数分解为整数部分和小数部分,返回一个元组,包含两个浮点数:第一个是小数部分,第二个是整数部分,整数部分是向零取整的结果,它不会四舍五入到最近的整数。
语法
math.modf(x)
参数
x
:浮点数示例
import math
# 正数
result = math.modf(12.3456)
print(result) # 输出: (0.34559999999999924, 12.0)
# 负数
result = math.modf(-12.3456)
print(result) # 输出: (-0.34559999999999924, -12.0)
# 零
result = math.modf(0.0)
print(result) # 输出: (0.0, 0.0)
# 整数
result = math.modf(5)
print(result) # 输出: (0.0, 5.0)
# 小数
result = math.modf(0.12345)
print(result) # 输出: (0.12345, 0.0)
作用
返回一个数的整数部分,去除小数部分。这个函数对于正数和负数都适用,并且总是向0
舍入。
语法
math.trunc(x)
参数
x
:数值表达式,要去除小数部分的数示例
import math
# 计算正数的整数部分
trunc_positive = math.trunc(10.9)
print(trunc_positive) # 输出: 10
# 计算负数的整数部分
trunc_negative = math.trunc(-10.9)
print(trunc_negative) # 输出: -10
# 计算零的整数部分
trunc_zero = math.trunc(0.0)
print(trunc_zero) # 输出: 0
# 计算整数的整数部分
trunc_integer = math.trunc(15)
print(trunc_integer) # 输出: 15
# 计算非常大的数的整数部分
trunc_large_number = math.trunc(12345678901234567890.9)
print(trunc_large_number) # 输出: 12345678901234567890
# 计算非常小的数的整数部分
trunc_small_number = math.trunc(0.0000000000000009)
print(trunc_small_number) # 输出: 0
作用
计算给定非负整数的阶乘。阶乘表示的是从1
乘到该数的所有正整数的乘积,用符号!
表示,例如,5!
表示5*4*3*2*1
。
语法
math.factorial(x)
参数
x
:非负整数,如果x
是负数或者非整数,函数将抛出ValueError
示例
import math
# 计算数字 5 的阶乘
factorial_of_5 = math.factorial(5)
print(factorial_of_5) # 输出: 120
# 计算数字 0 的阶乘
factorial_of_0 = math.factorial(0)
print(factorial_of_0) # 输出: 1
# 尝试计算负数的阶乘(这将引发错误)
try:
factorial_of_negative = math.factorial(-1)
except ValueError as e:
print(e) # 输出: factorial() not defined for negative values
# 尝试计算非整数的阶乘(这将引发错误)
try:
factorial_of_non_integer = math.factorial(3.5)
except ValueError as e:
print(e) # 输出: factorial() only accepts integral values
作用
计算两个数的浮点除法的余数,这个函数的行为类似于内置的%
运算符,但是fmod
总是返回带有与第二个参数(除数)相同符号的余数。
语法
math.fmod(x, y)
参数
x
:被除数,可以是整数或浮点数y
:除数,可以是整数或浮点数,但不能为零,如果y
为零,将引发ValueError
示例
import math
# 计算正数的余数
remainder_positive = math.fmod(10, 3)
print(remainder_positive) # 输出: 1.0
# 计算负数的余数
remainder_negative = math.fmod(-10, 3)
print(remainder_negative) # 输出: -1.0
# 计算浮点数的余数
remainder_float = math.fmod(7.5, 2.5)
print(remainder_float) # 输出: 0.5
# 尝试除数为零的情况(这将引发错误)
try:
remainder_zero_divisor = math.fmod(10, 0)
except ValueError as e:
print(e) # 输出: math domain error
作用
计算一系列数字的准确浮点数之和,这个函数比内置的sum
函数更精确,因为fsum
使用Kahan
求和算法来减少浮点数求和时可能出现的精度损失。
语法
math.fsum(iterable)
参数
iterable
:包含数字的可迭代对象,如列表、元组等示例
import math
# 使用 fsum 计算一组浮点数的和
numbers = [0.1, 0.2, 0.3, 0.4, 0.5]
sum_fsum = math.fsum(numbers)
print(sum_fsum) # 输出: 1.5
# 比较内置 sum 和 math.fsum 的结果
sum_builtin = sum(numbers)
print(sum_builtin) # 输出可能不是精确的 1.5,例如 1.5000000000000002
# 使用 fsum 计算范围中的数字和
sum_range = math.fsum(range(1, 101))
print(sum_range) # 输出: 5050
# 使用 fsum 计算包含非常大的数字和非常小的数字的列表
big_small_numbers = [1e100, 1e-100, -1e100, 1e-100]
sum_big_small = math.fsum(big_small_numbers)
print(sum_big_small) # 输出: 0.0
作用
计算两个整数的最大公约数(Greatest Common Divisor
)。
语法
math.gcd(a, b)
参数
a
:第一个整数b
:第二个整数示例
import math
# 计算两个正整数的最大公约数
print(math.gcd(54, 24)) # 输出: 6
# 计算包含0的情况
print(math.gcd(0, 5)) # 输出: 5
print(math.gcd(5, 0)) # 输出: 5
print(math.gcd(0, 0)) # 输出: 0
# 计算负整数的最大公约数(结果总是非负的)
print(math.gcd(-54, 24)) # 输出: 6
print(math.gcd(54, -24)) # 输出: 6
print(math.gcd(-54, -24)) # 输出: 6
# 计算两个相同整数的最大公约数
print(math.gcd(100, 100)) # 输出: 100
# 计算互质数的最大公约数
print(math.gcd(7, 11)) # 输出: 1
作用
将浮点数分解为尾数(significand
或mantissa
)和指数。
语法
math.frexp(x)
参数
x
:浮点数示例
import math
# 分解浮点数
significand, exponent = math.frexp(12.3456)
print("尾数:", significand) # 输出尾数 0.7716
print("指数:", exponent) # 输出指数 4
# 分解浮点数 0
significand, exponent = math.frexp(0.0)
print("尾数:", significand) # 输出尾数 0.0
print("指数:", exponent) # 输出指数 0
# 分解浮点数 -12.3456
significand, exponent = math.frexp(-12.3456)
print("尾数:", significand) # 输出尾数 -0.7716
print("指数:", exponent) # 输出指数 4
作用
将一个尾数(significand
或mantissa
)和一个指数结合成一个浮点数,这个函数是frexp
函数的逆操作,用于重建由frexp
分解的浮点数。
语法
math.ldexp(significand, exponent)
参数
significand
:尾数,通常是一个浮点数,其绝对值应该位于区间[0.5, 1)
内exponent
:指数,一个整数示例
import math
# 示例 1: 使用 frexp 和 ldexp
original_number = 12.3456
significand, exponent = math.frexp(original_number)
reconstructed_number = math.ldexp(significand, exponent)
print("原始数字:", original_number) # 输出 12.3456
print("重建数字:", reconstructed_number) # 输出 12.3456
# 示例 2: 直接使用 ldexp
significand = 0.9552734375 # 从示例 1 的 frexp 输出中获得
exponent = 4 # 从示例 1 的 frexp 输出中获得
result = math.ldexp(significand, exponent)
print("重建数字:", result) # 输出 15.284375
作用
将第二个浮点数的符号(正或负)复制给第一个浮点数,并返回结果。
语法
math.copysign(x, y)
参数
x
:浮点数,其符号将被替换y
:浮点数,其符号将被复制示例
import math
# 示例 1: 将正数的符号复制给负数
x = -5.0
y = 3.0
result = math.copysign(x, y)
print("Result:", result) # 输出: Result: 5.0
# 示例 2: 将负数的符号复制给正数
x = 5.0
y = -3.0
result = math.copysign(x, y)
print("Result:", result) # 输出: Result: -5.0
# 示例 3: 两个正数
x = 5.0
y = 3.0
result = math.copysign(x, y)
print("Result:", result) # 输出: Result: 5.0
# 示例 4: 两个负数
x = -5.0
y = -3.0
result = math.copysign(x, y)
print("Result:", result) # 输出: Result: -5.0
作用
比较两个值是否在一定的误差范围内相等。这对于浮点数比较特别有用,因为直接比较浮点数可能会由于精度问题导致不正确的结果。
语法
math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
参数
a
:第一个比较的数b
:第二个比较的数rel_tol
:相对容差,默认为1e-09
,相对容差是相对于输入值的大小的一个容差量,表示为b
的绝对值与a
的绝对值之比abs_tol
:绝对容差,默认为0.0
,绝对容差是独立于输入值大小的容差量示例
import math
# 示例 1: 默认容差比较
a = 0.1 + 0.2
b = 0.3
print(a == b) # 输出: False
print(math.isclose(a, b)) # 输出: True
# 示例 2: 使用自定义相对容差
a = 1.000001
b = 1.000002
print(math.isclose(a, b, rel_tol=1e-6)) # 输出: True
print(math.isclose(a, b, rel_tol=1e-7)) # 输出: False
# 示例 3: 使用自定义绝对容差
a = 1e-10
b = 2e-10
print(math.isclose(a, b, abs_tol=1e-9)) # 输出: True
print(math.isclose(a, b, abs_tol=1e-11)) # 输出: False
# 示例 4: 相对容差和绝对容差同时使用
a = 1e-10
b = 1.000001e-10
print(math.isclose(a, b, rel_tol=1e-5, abs_tol=1e-9)) # 输出: True
作用
检查给定值是否是有限的,即不是无穷大(infinity
)也不是非数(NaN
,Not a Number
),对于整数和浮点数,这个函数可以确定它们是否在有限的范围内。
语法
math.isfinite(x)
参数
x
:要检查的数,整数或浮点数示例
import math
# 检查正整数
print(math.isfinite(10)) # 输出: True
# 检查负整数
print(math.isfinite(-10)) # 输出: True
# 检查浮点数
print(math.isfinite(3.14)) # 输出: True
# 检查无穷大
print(math.isfinite(math.inf)) # 输出: False
print(math.isfinite(float('inf'))) # 输出: False
# 检查负无穷大
print(math.isfinite(-math.inf)) # 输出: False
print(math.isfinite(float('-inf'))) # 输出: False
# 检查 NaN
print(math.isfinite(math.nan)) # 输出: False
print(math.isfinite(float('nan'))) # 输出: False
# 检查 0
print(math.isfinite(0)) # 输出: True
print(math.isfinite(-0.0)) # 输出: True
作用
检查一个数是否是正无穷大或负无穷大。
语法
math.isinf(x)
参数
x
:要检查的数,整数或浮点数示例
import math
# 检查正整数
print(math.isinf(10)) # 输出: False
# 检查负整数
print(math.isinf(-10)) # 输出: False
# 检查浮点数
print(math.isinf(3.14)) # 输出: False
# 检查正无穷大
print(math.isinf(math.inf)) # 输出: True
print(math.isinf(float('inf'))) # 输出: True
# 检查负无穷大
print(math.isinf(-math.inf)) # 输出: True
print(math.isinf(float('-inf'))) # 输出: True
# 检查 NaN(非数)
print(math.isinf(math.nan)) # 输出: False
print(math.isinf(float('nan'))) # 输出: False
# 检查 0
print(math.isinf(0)) # 输出: False
print(math.isinf(-0.0)) # 输出: False
作用
检查一个数是否是NaN
(Not a Number
),即非数。
语法
math.isnan(x)
参数
x
:要检查的数,整数或浮点数示例
import math
# 检查正整数
print(math.isnan(10)) # 输出: False
# 检查负整数
print(math.isnan(-10)) # 输出: False
# 检查浮点数
print(math.isnan(3.14)) # 输出: False
# 检查 NaN
print(math.isnan(math.nan)) # 输出: True
print(math.isnan(float('nan'))) # 输出: True
# 检查无穷大
print(math.isnan(math.inf)) # 输出: False
print(math.isnan(-math.inf)) # 输出: False
# 检查 0
print(math.isnan(0)) # 输出: False
print(math.isnan(-0.0)) # 输出: False
作用
计算x
的y
次幂,即 x y x^y xy,它返回x
的y
次幂的值。
语法
math.pow(x, y)
参数
x
:底数,任意数值类型y
:指数,任意数值类型示例
import math
# 计算正数的幂
print(math.pow(2, 3)) # 输出: 8.0
# 计算负数的幂
print(math.pow(-2, 3)) # 输出: -8.0
# 计算分数的幂
print(math.pow(2, -3)) # 输出: 0.125
# 计算浮点数的幂
print(math.pow(2.5, 2)) # 输出: 6.25
# 计算指数为 0 的情况
print(math.pow(7, 0)) # 输出: 1.0
# 计算底数为 0 的情况
print(math.pow(0, 3)) # 输出: 0.0
# 注意:以下情况将引发 ValueError
# 因为 -2 是负数,而 0.5 不是整数
# print(math.pow(-2, 0.5))
作用
返回e
(自然对数的底数)的x
次方。
语法
math.exp(x)
参数
x
:数字,整数或浮点数,表示e
的指数示例
import math
# 计算 e 的次方
print(math.exp(1)) # 输出: 2.718281828459045
print(math.exp(0)) # 输出: 1.0
print(math.exp(-1)) # 输出: 0.36787944117144233
# 使用浮点数
print(math.exp(2.3)) # 输出: 9.974182454814034
# 使用较大的负数
print(math.exp(-5)) # 输出: 0.006737946999085467
作用
计算e
的x
次幂减1
的值,即 e x − 1 e^x-1 ex−1,expm1
函数在数值计算中很有用,因为它能够减少在x
接近0
时由于浮点数的精度限制而产生的误差。
语法
math.expm1(x)
参数
x
:数值表达式,表示e
的指数示例
import math
# 计算 e^0 - 1
print(math.expm1(0)) # 输出: 0.0
# 计算 e^1 - 1
print(math.expm1(1)) # 输出: 1.718281828459045
# 计算 e^2 - 1
print(math.expm1(2)) # 输出: 6.38905609893065
# 计算 e^-1 - 1
print(math.expm1(-1)) # 输出: -0.6321205588285577
# 计算 e^0.01 - 1
print(math.expm1(0.01)) # 输出: 0.010050167084164242
# 计算 e^-0.01 - 1
print(math.expm1(-0.01)) # 输出: -0.009950166589930842
作用
计算一个数的平方根,它返回非负数的平方根。
语法
math.sqrt(x)
参数
x
:非负数(大于等于0
),即需要计算平方根的数示例
import math
# 计算正数的平方根
print(math.sqrt(16)) # 输出: 4.0
# 计算浮点数的平方根
print(math.sqrt(2.25)) # 输出: 1.5
# 计算 0 的平方根
print(math.sqrt(0)) # 输出: 0.0
# 注意:以下情况将引发 ValueError
# 因为 -4 是负数,没有实数平方根
# print(math.sqrt(-4))
作用
计算自然对数(即以e
为底的对数)。
语法
math.log(x, [base])
参数
x
:正数,需要计算其自然对数的数base
:对数的底数。如果省略,则默认计算自然对数(底数为e
)示例
import math
# 计算自然对数(底数为 e)
print(math.log(math.e)) # 输出: 1.0
print(math.log(1)) # 输出: 0.0
# 计算以 10 为底的对数
print(math.log(100, 10)) # 输出: 2.0
# 计算以 2 为底的对数
print(math.log(8, 2)) # 输出: 3.0
# 如果 x 是负数或零,math.log 会抛出 ValueError
try:
print(math.log(-1))
except ValueError as e:
print(e) # 输出: math domain error
try:
print(math.log(0))
except ValueError as e:
print(e) # 输出: math domain error
作用
计算1+x
的自然对数(底数为e
的对数),这个函数是为了在x
非常接近0
时提供更高的精度,因为在x
接近0
时,直接计算math.log(1 + x)
可能会因为浮点数的精度问题而损失精度。
语法
math.log1p(x)
参数
x
:数值,通常是接近0
的正数,表示要计算1 + x
的自然对数示例
import math
# 计算 1 + 0 的自然对数
print(math.log1p(0)) # 输出: 0.0
# 计算 1 + 0.000001 的自然对数
# 使用 math.log1p 以获得更高的精度
print(math.log1p(0.000001)) # 输出: 1.0000000005000001e-06
# 计算 1 + 0.1 的自然对数
print(math.log1p(0.1)) # 输出: 0.09531017980432493
# 计算 1 + 1 的自然对数
print(math.log1p(1)) # 输出: 0.6931471805599453
# 计算 1 + 10 的自然对数
print(math.log1p(10)) # 输出: 2.3978952727983707
# 计算 1 + 100 的自然对数
print(math.log1p(100)) # 输出: 4.605170185988092
# 计算 1 + -0.000001 的自然对数
# 注意:x 不能是负数,因为 log1p(1 + x) 在 x 为负数时是未定义的
# 下面的代码将抛出 ValueError
try:
print(math.log1p(-0.000001))
except ValueError as e:
print("ValueError:", e) # 输出: ValueError: math domain error
作用
计算以2
为底的对数。
语法
math.log2(x)
参数
x
:大于0
的数值,表示要计算其以2
为底的对数示例
import math
# 计算 1 的以 2 为底的对数
print(math.log2(1)) # 输出: 0.0
# 计算 2 的以 2 为底的对数
print(math.log2(2)) # 输出: 1.0
# 计算 4 的以 2 为底的对数
print(math.log2(4)) # 输出: 2.0
# 计算 8 的以 2 为底的对数
print(math.log2(8)) # 输出: 3.0
# 计算 16 的以 2 为底的对数
print(math.log2(16)) # 输出: 4.0
# 计算 0.5 的以 2 为底的对数
print(math.log2(0.5)) # 输出: -1.0
# 计算 10 的以 2 为底的对数
print(math.log2(10)) # 输出: 3.3219280948873626
# 计算 32 的以 2 为底的对数
print(math.log2(32)) # 输出: 5.0
# 尝试计算负数或零的对数将抛出 ValueError
try:
print(math.log2(-1))
except ValueError as e:
print("ValueError:", e) # 输出: ValueError: math domain error
try:
print(math.log2(0))
except ValueError as e:
print("ValueError:", e) # 输出: ValueError: math domain error
作用
计算一个数的以10
为底的对数。
语法
math.log10(x)
参数
x
:正数,要计算其以10
为底的对数的数示例
import math
# 计算以 10 为底的对数
print(math.log10(1)) # 输出: 0.0
print(math.log10(10)) # 输出: 1.0
print(math.log10(100)) # 输出: 2.0
print(math.log10(1000)) # 输出: 3.0
# 如果 x 是负数或零,math.log10 会抛出 ValueError
try:
print(math.log10(-1))
except ValueError as e:
print(e) # 输出: math domain error
try:
print(math.log10(0))
except ValueError as e:
print(e) # 输出: math domain error
作用
将弧度转换为度。
语法
math.degrees(x)
参数
x
:数值表达式,需要转换的弧度值示例
import math
# 将π弧度转换为度
print(math.degrees(math.pi)) # 输出: 180.0
# 将π/2弧度转换为度
print(math.degrees(math.pi / 2)) # 输出: 90.0
# 将2π弧度转换为度
print(math.degrees(2 * math.pi)) # 输出: 360.0
# 将一个随机弧度值转换为度
random_radians = 1.0471975511965979 # 这实际上是60度对应的弧度值
print(math.degrees(random_radians)) # 输出: 60.0
作用
将角度转换为弧度。
语法
math.radians(x)
参数
x
:数值表达式,需要转换的度数值示例
import math
# 将180度转换为弧度
print(math.radians(180)) # 输出: 3.141592653589793
# 将90度转换为弧度
print(math.radians(90)) # 输出: 1.5707963267948966
# 将360度转换为弧度
print(math.radians(360)) # 输出: 6.283185307179586
# 将一个随机度数值转换为弧度
random_degrees = 60 # 60度
print(math.radians(random_degrees)) # 输出: 1.0471975511965976
作用
计算直角三角形的斜边长度,即计算两个数的平方和的平方根。
语法
math.hypot(x,y)
参数
x
:数值表达式,直角三角形的第一个直角边的长度y
:数值表达式,直角三角形的第二个直角边的长度示例
import math
# 计算直角三角形斜边长度,其中两个直角边长度分别为3和4
print(math.hypot(3, 4)) # 输出: 5.0
# 计算直角三角形斜边长度,其中两个直角边长度分别为5和12
print(math.hypot(5, 12)) # 输出: 13.0
# 计算直角三角形斜边长度,其中两个直角边长度分别为8和15
print(math.hypot(8, 15)) # 输出: 17.0
# 计算直角三角形斜边长度,其中两个直角边长度分别为-3和-4
# hypot函数可以处理负数,它返回的是正数的斜边长度
print(math.hypot(-3, -4)) # 输出: 5.0
# 计算直角三角形斜边长度,其中两个直角边长度分别为0和0
# 0和0的斜边长度是0
print(math.hypot(0, 0)) # 输出: 0.0
作用
计算一个数的正弦值,它接受一个弧度值作为参数,并返回该角度的正弦值。
语法
math.sin(x)
参数
x
:数值,表示需要计算正弦的弧度示例
import math
# 计算弧度 0 的正弦值
print(math.sin(0)) # 输出: 0.0
# 计算弧度 π/2 的正弦值
print(math.sin(math.pi / 2)) # 输出: 1.0
# 计算弧度 π 的正弦值
print(math.sin(math.pi)) # 输出: 1.2246467991473532e-16 (接近于 0)
# 计算弧度 3π/2 的正弦值
print(math.sin(3 * math.pi / 2)) # 输出: -1.0
# 计算弧度 -π/2 的正弦值
print(math.sin(-math.pi / 2)) # 输出: -1.0
# 计算弧度 -π 的正弦值
print(math.sin(-math.pi)) # 输出: -2.4492935982947064e-16 (接近于 0)
# 计算弧度 -3π/2 的正弦值
print(math.sin(-3 * math.pi / 2)) # 输出: 1.0
# 计算弧度 45 度(先将度转换为弧度)
print(math.sin(math.radians(45))) # 输出: 0.7071067811865475
作用
计算角度(以弧度为单位)的余弦值。
语法
math.cos(x)
参数
x
:数值表达式,以弧度为单位的角度示例
import math
# 计算π/4弧度的余弦值
print(math.cos(math.pi / 4)) # 输出: 0.7071067811865475
# 计算π/2弧度的余弦值
print(math.cos(math.pi / 2)) # 输出: 6.123233995736766e-17 (接近于0)
# 计算π弧度的余弦值
print(math.cos(math.pi)) # 输出: -1.0
# 计算0弧度的余弦值
print(math.cos(0)) # 输出: 1.0
# 计算负π/3弧度的余弦值
print(math.cos(-math.pi / 3)) # 输出: 0.5
# 注意:math.cos函数要求输入的是弧度,而不是度。
# 如果你有一个角度的度数,你需要先将它转换为弧度。
# 以下是将度转换为弧度的示例:
degrees = 45
radians = math.radians(degrees)
print(math.cos(radians)) # 输出: 0.7071067811865475
作用
计算一个数的正切值,它接受一个弧度值作为参数,并返回该角度的正切值。
语法
math.tan(x)
参数
x
:数值,表示需要计算正切的弧度示例
import math
# 计算弧度 0 的正切值
print(math.tan(0)) # 输出: 0.0
# 计算弧度 π/4 的正切值
print(math.tan(math.pi / 4)) # 输出: 1.0
# 计算弧度 π/3 的正切值
print(math.tan(math.pi / 3)) # 输出: 1.7320508075688767
# 计算弧度 π/2 的正切值
# 注意:π/2 的正切值是无穷大
print(math.tan(math.pi / 2)) # 输出: inf (无穷大)
# 计算弧度 π 的正切值
print(math.tan(math.pi)) # 输出: 0.0
# 计算弧度 3π/4 的正切值
print(math.tan(3 * math.pi / 4)) # 输出: -1.0
# 计算弧度 -π/4 的正切值
print(math.tan(-math.pi / 4)) # 输出: -1.0
# 计算弧度 -π/3 的正切值
print(math.tan(-math.pi / 3)) # 输出: -1.7320508075688767
# 计算弧度 -π/2 的正切值
# 注意:-π/2 的正切值是负无穷大
print(math.tan(-math.pi / 2)) # 输出: -inf (负无穷大)
# 计算弧度 -π 的正切值
print(math.tan(-math.pi)) # 输出: 0.0
# 计算弧度 -3π/4 的正切值
print(math.tan(-3 * math.pi / 4)) # 输出: 1.0
# 计算弧度 45 度(先将度转换为弧度)
print(math.tan(math.radians(45))) # 输出: 1.0
作用
计算一个数的反余弦值(arcosine
),它返回的角度范围是[0, π]
弧度。
语法
math.acos(x)
参数
x
:数值,需要计算反余弦的数,必须在[-1, 1]
范围内,超出这个范围会引发ValueError
示例
import math
# 计算数值 1 的反余弦值
print(math.acos(1)) # 输出: 0.0
# 计算数值 -1 的反余弦值
print(math.acos(-1)) # 输出: 3.141592653589793
# 计算数值 0.5 的反余弦值
print(math.acos(0.5)) # 输出: 1.0471975511965979
# 计算数值 -0.5 的反余弦值
print(math.acos(-0.5)) # 输出: 2.0943951023931957
# 注意:以下情况将引发 ValueError
# 因为 1.5 超出了 [-1, 1] 的范围
# print(math.acos(1.5))
作用
计算一个数的反正弦值(arcsine
),它返回的角度范围是[-π/2, π/2]
弧度。
语法
math.asin(x)
参数
x
:数值,需要计算反正弦的数,必须在[-1, 1]
范围内,超出这个范围会引发ValueError
示例
import math
# 计算数值 0 的反正弦值
print(math.asin(0)) # 输出: 0.0
# 计算数值 1 的反正弦值
print(math.asin(1)) # 输出: 1.5707963267948966 (π/2)
# 计算数值 -1 的反正弦值
print(math.asin(-1)) # 输出: -1.5707963267948966 (-π/2)
# 计算数值 0.5 的反正弦值
print(math.asin(0.5)) # 输出: 0.5235987755982989
# 计算数值 -0.5 的反正弦值
print(math.asin(-0.5)) # 输出: -0.5235987755982989
# 注意:以下情况将引发 ValueError
# 因为 1.5 超出了 [-1, 1] 的范围
# print(math.asin(1.5))
作用
计算一个数的反正切值(arctangent
),它返回的角度范围是[-π/2, π/2]
弧度。
语法
math.atan(x)
参数
x
:数值,表示需要计算反正切的数示例
import math
# 计算数值 0 的反正切值
print(math.atan(0)) # 输出: 0.0
# 计算数值 1 的反正切值
print(math.atan(1)) # 输出: 0.7853981633974483 (π/4)
# 计算数值 -1 的反正切值
print(math.atan(-1)) # 输出: -0.7853981633974483 (-π/4)
# 计算数值 0.5 的反正切值
print(math.atan(0.5)) # 输出: 0.4636476090008061
# 计算数值 -0.5 的反正切值
print(math.atan(-0.5)) # 输出: -0.4636476090008061
# 计算数值无穷大的反正切值
print(math.atan(float('inf'))) # 输出: 1.5707963267948966 (π/2)
# 计算数值负无穷大的反正切值
print(math.atan(float('-inf'))) # 输出: -1.5707963267948966 (-π/2)
作用
计算给定的X
和Y
坐标值的反正切(角度),其返回值是介于-π
到π
之间的角度(以弧度为单位),这个函数与atan
函数不同,它可以确定角度所在的象限。
语法
math.atan2(y, x)
参数
y
:数值表达式,表示Y
坐标或对边长度x
:数值表达式,表示X
坐标或邻边长度示例
import math
# 计算点(1, 1)的角度
angle = math.atan2(1, 1)
print(angle) # 输出: 0.7853981633974483 (π/4弧度)
# 计算点(0, 1)的角度
angle = math.atan2(1, 0)
print(angle) # 输出: 1.5707963267948966 (π/2弧度)
# 计算点(-1, 0)的角度
angle = math.atan2(-1, 0)
print(angle) # 输出: -1.5707963267948966 (-π/2弧度)
# 计算点(-1, -1)的角度
angle = math.atan2(-1, -1)
print(angle) # 输出: -2.356194490192345 (-3π/4弧度)
# 计算点(0, -1)的角度
angle = math.atan2(-1, 0)
print(angle) # 输出: -1.5707963267948966 (-π/2弧度)
# 计算点(1, -1)的角度
angle = math.atan2(-1, 1)
print(angle) # 输出: -0.7853981633974483 (-π/4弧度)
作用
计算双曲正弦值,双曲正弦是对数函数的自然对数形式。
语法
math.sinh(x)
参数
x
:数值表达式,要计算其双曲正弦的数值示例
import math
# 计算双曲正弦值
sinh_positive = math.sinh(1)
print(sinh_positive) # 输出: 1.1752011936438014
sinh_negative = math.sinh(-1)
print(sinh_negative) # 输出: -1.1752011936438014
sinh_zero = math.sinh(0)
print(sinh_zero) # 输出: 0.0
# 计算一些较大的数值的双曲正弦
sinh_large = math.sinh(10)
print(sinh_large) # 输出: 11013.232874703393
# 计算一些较小的数值的双曲正弦
sinh_small = math.sinh(0.01)
print(sinh_small) # 输出: 0.010050167084168055
作用
计算双曲余弦值。双曲余弦是对数函数的自然对数形式。
语法
math.cosh(x)
参数
x
:数值表达式,要计算其双曲余弦的数值示例
import math
# 计算双曲余弦值
cosh_positive = math.cosh(1)
print(cosh_positive) # 输出: 1.5430806348152437
cosh_negative = math.cosh(-1)
print(cosh_negative) # 输出: 1.5430806348152437
cosh_zero = math.cosh(0)
print(cosh_zero) # 输出: 1.0
# 计算一些较大的数值的双曲余弦
cosh_large = math.cosh(10)
print(cosh_large) # 输出: 11013.232874703393
# 计算一些较小的数值的双曲余弦
cosh_small = math.cosh(0.01)
print(cosh_small) # 输出: 1.010050167084168
作用
计算双曲正切值,双曲正切是对数函数的自然对数形式。
语法
math.tanh(x)
参数
x
:数值表达式,计算其双曲正切的数值示例
import math
# 计算双曲正切值
tanh_positive = math.tanh(1)
print(tanh_positive) # 输出: 0.7615941559557649
tanh_negative = math.tanh(-1)
print(tanh_negative) # 输出: -0.7615941559557649
tanh_zero = math.tanh(0)
print(tanh_zero) # 输出: 0.0
# 计算一些较大的数值的双曲正切
tanh_large = math.tanh(10)
print(tanh_large) # 输出: 0.9999999958776927 (接近于 1)
# 计算一些较小的数值的双曲正切
tanh_small = math.tanh(0.01)
print(tanh_small) # 输出: 0.010000333353732692
作用
计算参数的反双曲正弦值(也称为逆双曲正弦或反双曲正弦函数),反双曲正弦函数是双曲正弦函数的反函数。
语法
math.asinh(x)
参数
x
:数值表达式,要计算其反双曲正弦的数值示例
import math
# 计算反双曲正弦值
asinh_positive = math.asinh(1)
print(asinh_positive) # 输出: 0.881373587019543
asinh_negative = math.asinh(-1)
print(asinh_negative) # 输出: -0.881373587019543
asinh_zero = math.asinh(0)
print(asinh_zero) # 输出: 0.0
# 计算一些较大的数值的反双曲正弦
asinh_large = math.asinh(10)
print(asinh_large) # 输出: 2.99822295029797
# 计算一些较小的数值的反双曲正弦
asinh_small = math.asinh(0.01)
print(asinh_small) # 输出: 0.010000000000000002
作用
计算参数的反双曲余弦值(也称为逆双曲余弦或反双曲余弦函数),反双曲余弦函数是双曲余弦函数的反函数。
语法
math.acosh(x)
参数
x
:数值表达式,要计算其反双曲余弦的数值。该值必须大于等于1
,因为双曲余弦函数的值域是[1, +∞)
示例
import math
# 计算反双曲余弦值
acosh_one = math.acosh(1)
print(acosh_one) # 输出: 0.0
acosh_two = math.acosh(2)
print(acosh_two) # 输出: 1.3169578969248166
# 尝试计算小于 1 的值的反双曲余弦将引发 ValueError
try:
acosh_negative = math.acosh(0.5)
except ValueError as e:
print(e) # 输出: math domain error
# 计算一些较大的数值的反双曲余弦
acosh_large = math.acosh(10)
print(acosh_large) # 输出: 2.993222846126381
# 计算一些接近 1 的数值的反双曲余弦
acosh_close_to_one = math.acosh(1.0001)
print(acosh_close_to_one) # 输出: 5.786744313905478e-05
作用
计算参数的反双曲正切值(也称为逆双曲正切或反双曲正切函数),反双曲正切函数是双曲正切函数的反函数。
语法
math.atanh(x)
参数
x
:数值表达式,要计算其反双曲正切的数值。该值必须在区间(-1, 1)
内(不包括-1
和1
),因为双曲正切函数的定义域是(-1, 1)
示例
import math
# 计算反双曲正切值
atanh_zero = math.atanh(0)
print(atanh_zero) # 输出: 0.0
atanh_half = math.atanh(0.5)
print(atanh_half) # 输出: 0.5493061443340548
# 尝试计算等于 -1 或 1 的值的反双曲正切将引发 ValueError
try:
atanh_one = math.atanh(1)
except ValueError as e:
print(e) # 输出: math domain error
try:
atanh_minus_one = math.atanh(-1)
except ValueError as e:
print(e) # 输出: math domain error
# 尝试计算区间外数值的反双曲正切将引发 ValueError
try:
atanh_two = math.atanh(2)
except ValueError as e:
print(e) # 输出: math domain error
# 计算一些接近 -1 和 1 的数值的反双曲正切
atanh_close_to_one = math.atanh(0.999999)
print(atanh_close_to_one) # 输出: 7.254328619247669
atanh_close_to_minus_one = math.atanh(-0.999999)
print(atanh_close_to_minus_one) # 输出: -7.254328619247669
作用
计算高斯误差函数(Error
),数学表示: 2 π ∫ 0 x e − t 2 d t \frac{2}{\sqrt \pi}\int^x_0 e^{-t^2}dt π2∫0xe−t2dt。
语法
math.erf(x)
参数
x
:实数,需要计算误差函数的值的位置示例
import math
# 示例 1: 计算标准正态分布的误差函数值
x = 0.5
print(math.erf(x)) # 输出: 0.5204998778130465
# 示例 2: 计算负数的误差函数值
x = -0.5
print(math.erf(x)) # 输出: -0.5204998778130465
# 示例 3: 计算误差函数的极限值
# 当 x 趋向于正无穷时,erf(x) 趋向于 1
print(math.erf(float('inf'))) # 输出: 1.0
# 当 x 趋向于负无穷时,erf(x) 趋向于 -1
print(math.erf(float('-inf'))) # 输出: -1.0
# 当 x 为 0 时,erf(x) 为 0
print(math.erf(0)) # 输出: 0.0
参数
计算高斯互补误差函数(Complementary Error
),它是1
减去误差函数erf(x)
的值,数学表示: 2 π ∫ x ∞ e − t 2 d t \frac{2}{\sqrt \pi}\int^\infty_x e^{-t^2}dt π2∫x∞e−t2dt。
语法
math.erfc(x)
参数
x
:实数,需要计算互补误差函数的值的位置示例
import math
# 示例 1: 计算标准正态分布的互补误差函数值
x = 0.5
print(math.erfc(x)) # 输出: 0.4795001221869534
# 示例 2: 计算负数的互补误差函数值
x = -0.5
print(math.erfc(x)) # 输出: 1.5204998778130465
# 示例 3: 计算互补误差函数的极限值
# 当 x 趋向于正无穷时,erfc(x) 趋向于 0
print(math.erfc(float('inf'))) # 输出: 0.0
# 当 x 趋向于负无穷时,erfc(x) 趋向于 2
print(math.erfc(float('-inf'))) # 输出: 2.0
# 当 x 为 0 时,erfc(x) 为 1
print(math.erfc(0)) # 输出: 1.0
作用
计算伽玛函数(Gamma
),它是一个扩展到实数和复数域上的阶乘函数,通常表示为 Γ ( x ) \Gamma(x) Γ(x),数学表示: ∫ 0 ∞ x t − 1 e − x d x \int^\infty_0 x^{t-1}e^{-x}dx ∫0∞xt−1e−xdx。
语法
math.gamma(x)
参数
x
:实数,需要计算伽玛函数的值的点示例
import math
# 计算不同数值的伽玛函数值
print(math.gamma(1)) # 输出: 1.0 (伽玛函数的特殊值,gamma(n) = (n-1)! 对于 n 是正整数)
print(math.gamma(0.5)) # 输出: 1.772453850905516 (伽玛函数的特殊值)
print(math.gamma(5.5)) # 输出: 52.34277778455352
# 尝试计算非正整数的伽玛函数值将引发 ValueError
# 下面的代码将引发异常
# print(math.gamma(-1)) # ValueError: math domain error
作用
计算参数x
的伽玛函数的对数值,与gamma
函数相比,lgamma
可以避免在x
非常大时出现的数值溢出问题,并且可以直接处理负数参数,数学表示:ln(gamma(x))
。
语法
math.lgamma(x)
参数
x
: 浮点数,表示要计算其伽玛函数对数值的数值,x
可以是任意实数,但通常使用正数示例
import math
# 计算不同数值的伽玛函数对数值
print(math.lgamma(1)) # 输出: 0.0 (伽玛函数的特殊值,lgamma(n) = 0 对于 n 是正整数)
print(math.lgamma(0.5)) # 输出: 0.572365234479919 (伽玛函数的特殊值)
print(math.lgamma(5.5)) # 输出: 3.957813967618716
math.pi
:圆周率π
math.e
:自然对数的底数e
math.tau
:圆周率的两倍,即2π
math.inf
:正无穷大math.nan
:NaN
(不是数字)