2012-03-07 10 views
73

なぜPythonは「間違った」答えを出すのですか?Pythonで平方根を計算する方法は?

x= 16 

sqrt= x**(.5) 
returns 4 

sqrt= x**(1/2) 
returns 1 

はい、私はimport mathを知っているとsqrtを使用しています。しかし、私は上記の答えを探しています。

+20

Python 3で試してみてください、それは修正されました;) –

+2

Pythonの平方根を 'import math'で計算し、' x = math.sqrt(25) 'でxに値5.0を代入します。 –

+1

タイトルが間違っています... – Julian

答えて

140

sqrt=x**(1/2)整数除算を行っています。 1/2 == 0

したがって、最初にx (1/2)を計算し、2番目にx (0)を計算しています。

これは間違いではない、異なる質問に対する正しい答えです。

+23

「それは間違っていない、別の質問に対する正しい答えです」 - それを愛する! - 私はこのフレーズをもっと頻繁に使うように挑戦するかもしれないと思う! –

+2

Python 3.6では、あなたが最初に尋ねた質問に対する正しい答えが得られます。 – vwvan

7

/は、Python 2の整数の除算を実行します。

>>> 1.0/2 
0.5 
>>> 16**(1.0/2) 
4.0 
62

あなたが書く必要があります:sqrt = x**(1/2.0)を、そうでない場合は

>>> 1/2 
0 

数字の1がフロートがある場合は、それが期待どおりに動作整数除算が行われ、式1/20を返します。

この動作はPython 2.xでは「正常」ですが、Python 3.xでは1/2では0.5と評価されます。 Python 2.xコードを3.x w.r.tのように動作させたい場合除算書込みfrom __future__ import division - 次に1/20.5と評価され、下位互換性のために1//20と評価されます。

と記録のために、平方根を計算するための好ましい方法はこれです:あなたが見ている何

import math 
math.sqrt(x) 
+1

+1もタイトルからの質問に答えます。 –

+1

質問を読んでいないため、負の1 ... – Merlin

5

は整数除算です。

from __future__ import division 

浮動小数点数の1または2を浮動小数点値に変換することができます。

sqrt = x**(1.0/2) 
-1

あなたは私が下記のコードは、あなたの質問に答えることを願っ配列

import numpy as np 
np.sqrt([1,4,9]) 
-2

の平方根を計算するためにnumpyのを使用することができます。

from __future__ import print_function 

def root(x,a): 
    y = 1/a 
    y = float(y) 
    print(y) 
    z = x ** y 
    print(z) 

base = input("Please input the base value:") 
power = float(input("Please input the root value:")) 


root(base,power) 

よろしく、 アリ

1

これは答えることが少し遅れかもしれませんが、平方根を計算するための最も簡単かつ正確な方法は、ニュートン法です。

平方根(num)を計算する数値があり、その平方根の数は(estimate)です。 Estimateは0より大きな任意の数にすることができますが、意味を成す数は再帰的なコール深度を大幅に短縮します。

new_estimate = (estimate + num/estimate)/2 

この行は、2つのパラメータでより正確な見積もりを計算します。 new_estimateの値を関数に渡して、前のものよりも正確な別のnew_estimateを計算するか、またはこのような再帰的な関数定義を作成することができます。

def newtons_method(num, estimate): 
    # Computing a new_estimate 
    new_estimate = (estimate + num/estimate)/2 
    print(new_estimate) 
    # Base Case: Comparing our estimate with built-in functions value 
    if new_estimate == math.sqrt(num): 
     return True 
    else: 
     return newtons_method(num, new_estimate) 

たとえば、30の平方根を求める必要があります。

5.5 
5.477272727272727 
5.4772255752546215 
5.477225575051661 

最後の結果は、最も正確な計算である:私たちは、ある数は30で、推定値は、各再帰呼び出しの結果5です

newtons_method(30,5) 

5〜6の結果であることを知っていますnumberの平方根これは組み込み関数math.sqrt()と同じ値です。

関連する問題