なぜPythonは「間違った」答えを出すのですか?Pythonで平方根を計算する方法は?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
はい、私はimport math
を知っているとsqrt
を使用しています。しかし、私は上記の答えを探しています。
なぜPythonは「間違った」答えを出すのですか?Pythonで平方根を計算する方法は?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
はい、私はimport math
を知っているとsqrt
を使用しています。しかし、私は上記の答えを探しています。
sqrt=x**(1/2)
整数除算を行っています。 1/2 == 0
。
したがって、最初にx (1/2)を計算し、2番目にx (0)を計算しています。
これは間違いではない、異なる質問に対する正しい答えです。
「それは間違っていない、別の質問に対する正しい答えです」 - それを愛する! - 私はこのフレーズをもっと頻繁に使うように挑戦するかもしれないと思う! –
Python 3.6では、あなたが最初に尋ねた質問に対する正しい答えが得られます。 – vwvan
/
は、Python 2の整数の除算を実行します。
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
あなたが書く必要があります:sqrt = x**(1/2.0)
を、そうでない場合は
>>> 1/2
0
数字の1がフロートがある場合は、それが期待どおりに動作整数除算が行われ、式1/2
は0
を返します。
この動作はPython 2.xでは「正常」ですが、Python 3.xでは1/2
では0.5
と評価されます。 Python 2.xコードを3.x w.r.tのように動作させたい場合除算書込みfrom __future__ import division
- 次に1/2
は0.5
と評価され、下位互換性のために1//2
は0
と評価されます。
と記録のために、平方根を計算するための好ましい方法はこれです:あなたが見ている何
import math
math.sqrt(x)
+1もタイトルからの質問に答えます。 –
質問を読んでいないため、負の1 ... – Merlin
は整数除算です。
from __future__ import division
浮動小数点数の1または2を浮動小数点値に変換することができます。
sqrt = x**(1.0/2)
あなたは私が下記のコードは、あなたの質問に答えることを願っ配列
import numpy as np
np.sqrt([1,4,9])
の平方根を計算するために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)
よろしく、 アリ
これは答えることが少し遅れかもしれませんが、平方根を計算するための最も簡単かつ正確な方法は、ニュートン法です。
平方根(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()と同じ値です。
Python 3で試してみてください、それは修正されました;) –
Pythonの平方根を 'import math'で計算し、' x = math.sqrt(25) 'でxに値5.0を代入します。 –
タイトルが間違っています... – Julian