数学域错误Python

数学域错误Python,python,Python,我试着用这个公式做一个二次计算器,但我一直得到一个数学域错误。这是我的代码: # coding: utf-8 from math import sqrt a = 3 b = 9 c = 2 appaul = ((-1 * b) + sqrt((b ** 2) * (-4 * a * c))) / 2 print appaul 您应该使用cmath的sqrt,就像Rogalki或u muss check的答案一样,在您计算之前,增量不是负数(Python3): 编码:utf-8 b^2-4

我试着用这个公式做一个二次计算器,但我一直得到一个数学域错误。这是我的代码:

# coding: utf-8

from math import sqrt
a = 3
b = 9
c = 2

appaul = ((-1 * b) + sqrt((b ** 2) * (-4 * a * c))) / 2

print appaul

您应该使用cmath的sqrt,就像Rogalki或u muss check的答案一样,在您计算之前,增量不是负数(Python3):

编码:utf-8
b^2-4ac,而不是b^2*4ac

你的
-
应该到外面来

>>> appaul = ((-1 * b) + sqrt((b ** 2) - (4 * a * c))) / 2
>>> print appaul
-0.725082782365

这是一个负数。你们正试图找到它的平方根

(b ** 2) * (-4 * a * c)
要查看它的效果,请执行以下命令

num = (b ** 2) * (-4 * a * c)
print num
appaul = ((-1 * b) + sqrt(num)) / 2    
print appaul
导致-

-1944
Traceback (most recent call last):
  File "solution.py", line 118, in <module>
    appaul = ((-1 * b) + sqrt(num)) / 2
ValueError: math domain error
-1944
回溯(最近一次呼叫最后一次):
文件“solution.py”,第118行,在
appaul=(-1*b)+sqrt(num))/2
ValueError:数学域错误

开头的负数是您试图求其平方根的数。

您取的是负数的平方比
b^2-4ac<0
=>你的方程没有解!二次公式中的输入错误-应该是
(b**2)-(4*a*c)
,而不是将术语相乘在一起。请尝试使用cmath import sqrt中的
-它将允许您对复数进行运算。@gtlambert 9^2-4*3*2大于0,尽管OP的输入错误使其为负值。对于他的情况,它是增量正值。但请记住:对于另一种情况,可能是delta阴性。用新的公式,你又犯了错误
num = (b ** 2) * (-4 * a * c)
print num
appaul = ((-1 * b) + sqrt(num)) / 2    
print appaul
-1944
Traceback (most recent call last):
  File "solution.py", line 118, in <module>
    appaul = ((-1 * b) + sqrt(num)) / 2
ValueError: math domain error