2016-09-04 13 views
0

私は学習している本のコードをコピーしようとしています。プログラムは2次関数の平方根を見つけるはずですが、IDLEでモジュールを実行するとエラーが発生します。平方根のあるドメインエラー

#This is a program to find the square roots of a quadratic function. 



import math 

def main(): 

    print ("this is a program to find square roots of a quadratic function") 
    print() 
    a,b,c = eval(input("enter the value of the coefficients respectively")) 

    discRoot = math.sqrt(b * b - 4 * a * c) 

    root1 = (- b + discRoot)/2 * a 
    root2 = (- b - discRoot)/2 * a 

    print ("The square roots of the equation are : ", root1, root2) 
    print() 

main() 

私は、次のエラーを取得しています:私はここで間違って正確に

Traceback (most recent call last): 
File "/home/ubuntu/Desktop/untitled.py", line 21, in <module> 
main() 
File "/home/ubuntu/Desktop/untitled.py", line 13, in main 
discRoot = math.sqrt(b * b - 4 * a * c) 
ValueError: math domain error 

何をしているのですか? discRoorの値が負になっているからでしょうか?

+0

から4 * A * c'は負ですか? – DeepSpace

+0

質問のタイトルをよりわかりやすくしてください –

+0

'int'を使うときに' eval'を使うのはなぜですか? – Li357

答えて

1

毎回b * b - 4 * a * cが負の数の場合、math.sqrt(b * b - 4 * a * c)ValueErrorになります。

どちらかその前に確認するか、cmathモジュールからsqrtを使用する複雑な根を許可する:

. 
. 
delta = b * b - 4 * a * c 
if delta > 0: 
    discRoot = math.sqrt(delta) 
else: 
    print("No solutions") 
. 
. 

をまたは許可複雑な根:とき `のb * bを何が起こる

import cmath 

. 
. 
discRoot = cmath.sqrt(b * b - 4 * a * c) 
. 
.