2016-10-07 4 views
0

入力された数値の立方根を小数点以下2桁までで計算するコードを作成することになっています。このコードは、上記までの小数点以下が2桁の数の平方根を計算します。キューブルートの計算:OverflowError:( 'Result too large')

epsilon = 0.01 
guess = num/2.0 
while abs(guess**2 - num) >= epsilon: 
    guess = guess - abs(guess**2 - num)/(2 * guess) 
print("Guess:", guess) 

だから明らかに私は与えられたこのコードを変更し、コードでこれを使用して、その基準に立方根を行うことができますよ:

delta = abs(guess**3 - num)/100.0 

私はそのラインを使用し、平方根のために使用されるコードを変更しようとしたと私は入れません:

OverflowError: ('Result too large') 

これは私のコードは、これまでのように見えるものです:

num = float(input("Enter a number: ")) 
epsilon = 0.01 
guess = num/2.0 
while abs(guess**3 - num) >= epsilon: 
    guess = abs(guess - (guess**3 - num)/100.0) 
print("Guess:", guess) 

私はこの上にそのコードを実行し、何が起こるかです:

runfile('C:/Users/100617828/Documents/CSCI1040U/edits.py', runfile('C:/Users/100617828/Documents/CSCI1040U/edits.py', wdir='C:/Users/100617828/Documents/CSCI1040U')

Enter a number: 34 Traceback (most recent call last):

File "", line 1, in runfile('C:/Users/100617828/Documents/CSCI1040U/edits.py', wdir='C:/Users/100617828/Documents/CSCI1040U')

File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 699, in runfile execfile(filename, namespace)

File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 88, in execfile exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)

File "C:/Users/100617828/Documents/CSCI1040U/edits.py", line 11, in while abs(guess**3 - num) >= epsilon:

OverflowError: (34, 'Result too large')

編集 enter image description here

これは私の割り当てシートが何を私に言っているが、それは私ドン思われるものですdelta = abs(guess**3 - num)/100.0を使用する必要はありませんか?

+1

で作業コードをしてください参照してください**トレースバックの**全文を含めますファイル名、行番号、およびすべて。あなたはキューブのルートを計算する方法の数学を理解していますか? – MattDMo

+0

反復近似が必要ですか? 'x **(1/3)'はあなたのためにどのように機能しますか? – Evert

+0

私はトレースバックを使用して最初のstackoverflowを使用して申し訳ありませんが、私は単純な方程式で(1/3)の指数に番号を持つだけでキューブのルートを計算することができることを理解しています。 – Langfao

答えて

4

使用している方法はNewton-Raphson approximationと呼ばれ、分母として解決しようとしている関数の1次導関数を使用する必要があります。 x^3の最初の誘導体は3*x^2あるので、反復行がなければなりません:

guess = guess - abs(guess**3 - num)/(3 * guess**2) 

は、[編集]あなたの質問https://repl.it/DqZA/0

+0

申し訳ありませんもっと詳しく説明してもらえますか?あなたは正確な近似を得ることができるように思われますが、私の教師である私の割り当ての指示では、この「delta = abs(guess ** 3-num)/ 100.0」をヒントとして与えました。私はあなたが私に示した固定されたものと私が例として与えられたものの両方で、コードが一般にどのように機能するかについてはあまりよく分かりません。 – Langfao

+0

@Langfao最初の(平方根)の例を調べると、分母が定数ではなく '(2 *推測)'であることがわかります。そのヒントについてはわかりません。これは、 'x^2'の導関数が' 2 * x'であるという事実に由来します。メソッドの数学については、[Wikipedia entry](https://en.wikipedia.org/wiki/Newton%27s_method)を参照してください。 – Selcuk

+0

は、ヒントが本当に人々を捨てることを意味していたのですか?私はプログラミングのクラスの紹介をしています。私はコーディングの初心者であり、クラスの他の多くの人も同様です。 – Langfao

関連する問題