二次公式求解器误差

时间:2016-10-15 14:22:39

标签: python math.sqrt

我正在编写一个python二次方程求解器,它工作正常,然后我又跑了一次,它给了我以下错误:

Traceback (most recent call last):
  File "/Users/brinbrody/Desktop/PythonRunnable/QuadraticSolver.py", line 18, in <module>
    rted = math.sqrt(sqb-ac4)
ValueError: math domain error

这是我的代码:

#Quadratic Formula Solver

#Imports
import math

#User Inputs
a = int(input("a = "))
b = int(input("b = "))
c = int(input("c = "))

#Variables
sqb = b**2
ac4 = 4*a*c
a2 = 2*a
negb = 0-b

#Calculations
rted = math.sqrt(sqb-ac4)
top1 = negb + rted
top2 = negb - rted
low1 = round(top1/a2, 2)
low2 = round(top2/a2, 2)

#Output
print("Possible Values of x:")
print("1.",low1)
print("2. ",low2)

此错误与我尝试的每个输入一致。

1 个答案:

答案 0 :(得分:0)

正如xli所说,这是由于sqb-ac4返回负值,而python数学模块不能取负值的平方根。

解决此问题的方法是:

import sys
determin = sqb - ac4
if determin < 0:
    print("Complex roots")
    sys.exit()
else:
    rted = math.sqrt(determin)