2017-09-22 3 views
0

私は、入力の根を見つける目的でPythonで二次方程式を作成しました。私は非常に特定の出力を期待していますが、私は自分のコードを書いたやり方で浮動小数点数を変換/丸めする方法や、例えば1e-9を返すコードを得る方法を知らない。どんな考えも大歓迎です。出力として二次関数を作成し、Pythonで特定のスタイルルーツを見つける

[-0.33333333333333334, 2.0] 
    [-inf, nan] 
    [-999999999.99999999791, 0.0] 

をして取得したいと思い:私は現在取得しています

 def find_roots(a,b,c): 
     d=(b**2)-(4*a*c) 
     if d <0: 
      print ([]) 
     elif d==0: 
      x=(np.float128(-b+math.sqrt(d))/(2*a)) 
      print(x) 
     else: 
      x1=(np.float128(-b-math.sqrt(d))/(2*a)) 
      x2=(np.float128(-b+math.sqrt(d))/(2*a)) 
      list=[x1,x2] 
      print (sorted(list, reverse=False)) 

    find_roots(-3,5,2) 
    find_roots(0,5,4) 
    find_roots(1e-8,10,1e-8) 

小数、小数:

[-1.0/3.0, 2.0] 
    [-0.8] 
    [1e-8, 10.0, 1e-8] 
+0

おそらく、より正確な浮動小数点数のためには、 'numpy'よりも' Decimal'モジュールが必要でしょう。 '-1.0/3.0'のような小数点については、フロートを分けてコードを分けて文字列として出力しない限り、それは起こりません。 – Peter

+0

'a = 0'のとき、除算はゼロです。 – Unni

+0

二次方程式を解く方法を変更する方法はありますか?ここでは、入力(0,5,4)で分子をゼロにすることを避けますか?即ち、x、x1及びx2を変化させるか? –

答えて

0

あなたの所望の出力は、あなたの結果の数字の三つの異なるフォーマットのスタイルを必要とし、および科学的(または指数関数的)である。関数に別のパラメータを渡して、関数に数値の書式を指定するか、書式設定自体を実行することができます(この場合のパラメータは関数になります)。例えば

:かなりの二次方程式を記述していない

def decimal_to_scientific(x): 
    return <the formatted x (you can find this online)> 

def find_roots(a, b, c, format): 
    ... 
    elif d == 0: 
     ... 
     x = format(x) 
     print x 
    ... 

find_roots(1e-8, 10, 1e-8, decimal_to_scientific) 
+0

二次方程式を解く方法を変更する方法はありますか?ここでは、入力(0,5,4)で分子がゼロにならないようにします。即ち、x、x1及びx2を変化させるか? –

+0

JHが指摘したように、メソッドにこれらのパラメータのチェックを追加して、選択した例外を発生させるのが好ましいでしょう。あるいは、もしあなたが実際にあなたがパラメータのどれかを変更できることを望んだのであれば、それはその関数がやろうとしていることの範囲ではありません。この関数は入力パラメータの根を見つけるので、元のパラメータ以外の値の根を返すのはなぜですか? – JDollars

0
find_roots(0, 5, 4) 

。これは線形y = 5*x + 4の式です。あなたがa == 0を渡すときに2*aで分けたいルーチンを呼び出すことはほとんど公平ではありません。例外を発生させるのは正しいでしょう。多分、気分が悪いのではないでしょうか?

数字がrationalsであることを考えてみてください。

+0

入力(0,5,4)にゼロの分子があるのを避ける2次方程式を解く方法を変更する方法はありますか?即ち、x、x1及びx2を変化させるか? –

+0

(背景:y = mx + bと考える) 'sqrt(n)'を呼び出すと、 'n'が非負である(または呼び出し元が虚偽のルートに準備されている)という期待があります。次数2の多項式の根を求めるとき、多項式がその次数を持つと期待されます。そうでない場合、 '-b/m'の単一ルートを計算する方がずっと簡単です。非ゼロの' m'を仮定します。あなたは程度チェックを強制していないだけなので、 '-inf'の結果について不平を言うのは妥当ではないようです。 –

関連する問題