2024-09-30 20:28:01 发布
网友
为什么我会得到这个错误?在
我试着解这样一个方程:
轴^2+bx+c
Traceback (most recent call last): File "I:/Taller de Programacion I/Clase 5/11.py", line 6, in <module> x1 = (-b + sqrt(b ** 2 - a * c)) / (2 * a) ValueError: math domain error
math模块(我想您正在使用的)不支持复数。使用cmath(python2和python3)或幂运算符**(python3)。在
math
cmath
**
不管有什么区别,这都应该是有效的:
x1 = (-b + (b ** 2 - 4 * a * c) ** .5) / 2 / a
示例:
当使用具有相同值的math.sqrt时,将引发所述错误:
math.sqrt
>>> (-b + sqrt(b ** 2 - a * c)) / (2 * a) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: math domain error
看起来
b**2 - a*c
是否定的。将该值传递给sqrt()时,将遇到域错误。在
sqrt()
即使您认为表达式的计算结果应为正值,浮点舍入错误也可能导致负值。请记住,浮点运算并不精确。在
虽然一个更可能的解释是你把表达式转录错误了。你当然是说:
话虽如此,如果二次曲线没有实解,那么你会遇到域误差。如果二次型有重复的实解(即两个解的值相同),那么舍入误差也会导致域误差。在
例如,考虑以下等式:
(x-0.7)(x-0.7) = 0
系数为:
a: 1.0 b: -1.4 c: 0.49
如果将这些输入到Python中,会得到以下结果:
>>> a=1.0 >>> b=-1.4 >>> c=0.49 >>> b**2 - 4*a*c -2.220446049250313e-16
所以即使方程有一个真正的解,你仍然可能会碰到这个问题。在
math
模块(我想您正在使用的)不支持复数。使用cmath
(python2和python3)或幂运算符**
(python3)。在不管有什么区别,这都应该是有效的:
示例:
^{pr2}$当使用具有相同值的
math.sqrt
时,将引发所述错误:看起来
是否定的。将该值传递给
sqrt()
时,将遇到域错误。在即使您认为表达式的计算结果应为正值,浮点舍入错误也可能导致负值。请记住,浮点运算并不精确。在
虽然一个更可能的解释是你把表达式转录错误了。你当然是说:
^{pr2}$话虽如此,如果二次曲线没有实解,那么你会遇到域误差。如果二次型有重复的实解(即两个解的值相同),那么舍入误差也会导致域误差。在
例如,考虑以下等式:
系数为:
如果将这些输入到Python中,会得到以下结果:
所以即使方程有一个真正的解,你仍然可能会碰到这个问题。在
相关问题 更多 >
编程相关推荐