Python 二次根函数的数学域误差
我的代码:Python 二次根函数的数学域误差,python,python-3.x,Python,Python 3.x,我的代码: def root1(a,b,c): return (-b+sqrt((b**2)-4*a*c))/2*a def root2(a,b,c): return (-b-sqrt((b**2)-4*a*c))/2*a 我得到了一个ValueError:math domain error,我不知道为什么。大概你有这样的错误 from math import sqrt 使用 from cmath import sqrt 中的sqrt函数可以处理否定参数 比如说, >
def root1(a,b,c):
return (-b+sqrt((b**2)-4*a*c))/2*a
def root2(a,b,c):
return (-b-sqrt((b**2)-4*a*c))/2*a
我得到了一个
ValueError:math domain error
,我不知道为什么。大概你有这样的错误
from math import sqrt
使用
from cmath import sqrt
中的sqrt
函数可以处理否定参数
比如说,
>>> from math import sqrt
>>> sqrt(-4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> from cmath import sqrt
>>> sqrt(-4)
2j
来自数学导入sqrt的>>
>>>sqrt(-4)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:数学域错误
>>>从cmath导入sqrt
>>>sqrt(-4)
2j
你大概有
from math import sqrt
使用
from cmath import sqrt
中的sqrt
函数可以处理否定参数
比如说,
>>> from math import sqrt
>>> sqrt(-4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> from cmath import sqrt
>>> sqrt(-4)
2j
来自数学导入sqrt的>>
>>>sqrt(-4)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
ValueError:数学域错误
>>>从cmath导入sqrt
>>>sqrt(-4)
2j
作为使用cmath
这一绝妙想法的替代方案,您可以坚持使用实数透视图,仍然可以创建二次公式的安全版本。根式下的表达式D称为The,在数学中有多种用途。在处理二次函数时,经常会出现三种情况(例如,当将有理函数与二次分母进行积分时,您需要根据D<0、D=0或D>0使用不同的方法)。下面的代码计算判别式并返回一个元组,该元组具有0、1或2个数字,具体取决于是否有0、1或2个实根。调用代码可以检查返回值的长度,并根据该长度决定要执行的操作:
def discriminant(a,b,c):
return b**2 - 4*a*c
def quadratic(a,b,c):
D = discriminant(a,b,c)
if D > 0:
sqr = math.sqrt(D)
return ((-b + sqr)/(2*a), (-b - sqr)/(2*a))
elif D == 0:
return (-b/(2*a),)
else:
return ()
例如:
>>> quadratic(1,2,-3)
(1.0, -3.0)
>>> quadratic(1,2,1)
(-1.0,)
>>> quadratic(1,2,3)
()
作为使用
cmath
这一优秀想法的替代方案,您可以坚持实数观点,并且仍然创建二次公式的安全版本。根式下的表达式D称为The,在数学中有多种用途。在处理二次函数时,经常会出现三种情况(例如,当将有理函数与二次分母进行积分时,您需要根据D<0、D=0或D>0使用不同的方法)。下面的代码计算判别式并返回一个元组,该元组具有0、1或2个数字,具体取决于是否有0、1或2个实根。调用代码可以检查返回值的长度,并根据该长度决定要执行的操作:
def discriminant(a,b,c):
return b**2 - 4*a*c
def quadratic(a,b,c):
D = discriminant(a,b,c)
if D > 0:
sqr = math.sqrt(D)
return ((-b + sqr)/(2*a), (-b - sqr)/(2*a))
elif D == 0:
return (-b/(2*a),)
else:
return ()
例如:
>>> quadratic(1,2,-3)
(1.0, -3.0)
>>> quadratic(1,2,1)
(-1.0,)
>>> quadratic(1,2,3)
()
如果您将参数打印到
sqrt(…)
中,可能会给您一个提示..欢迎使用StackOverflow!你能提供完整的例子吗?就像这里解释的:。如果您将参数打印到sqrt(…)
中,可能会给您一个提示。欢迎使用StackOverflow!你能提供完整的例子吗?就像这里解释的:@PM2Ring很好!当我写这篇文章时,我恳求咖啡因不足。我将调整代码。@PM2Ring很好!当我写这篇文章时,我恳求咖啡因不足。我将调整代码。