Mengapa Python memberikan "salah" jawabannya?
x = 16
sqrt = x**(.5)
returns 4
sqrt = x**(1/2)
returns 1
Ya, aku tahu impor matematika
dan menggunakan sqrt
. Tapi aku'm mencari jawaban di atas.
sqrt=x**(1/2)
adalah melakukan pembagian integer. 1/2 == 0
.
Jadi anda're komputasi x(1/2) dalam contoh pertama, x(0) di kedua.
Jadi itu's tidak salah, itu's jawaban yang benar untuk pertanyaan yang berbeda.
Anda harus menulis: sqrt = x**(1/2.0)
, jika tidak bilangan bulat pembagian dilakukan dan ekspresi 1/2
kembali 0
.
Perilaku ini adalah "normal" di Python 2.x, sedangkan di Python 3.x 1/2
mengevaluasi 0.5
. Jika anda ingin Python 2.x code untuk berperilaku seperti 3.x w.r.t. divisi menulis dari __masa__ impor divisi
- maka 1/2
akan mengevaluasi untuk 0.5
dan untuk kompatibilitas mundur, 1//2
akan mengevaluasi untuk 0
.
Dan untuk catatan, cara yang lebih disukai untuk menghitung akar kuadrat adalah:
import math
math.sqrt(x)
Ini mungkin sedikit terlambat untuk menjawab tapi yang paling sederhana dan cara yang akurat untuk menghitung akar kuadrat adalah newton's metode.
Anda memiliki jumlah yang anda ingin menghitung akar kuadrat (num)
dan anda harus menebak dari akar kuadrat (perkiraan)
. Perkiraan bisa menjadi nomor apapun yang lebih besar dari 0, tetapi jumlah yang masuk akal memperpendek panggilan rekursif kedalaman secara signifikan.
new_estimate = (estimate + num / estimate) / 2
Baris ini menghitung perkiraan yang lebih akurat dengan 2 parameter. Anda dapat melewati new_estimate nilai fungsi dan komputasi lain new_estimate yang lebih akurat dari yang sebelumnya atau anda dapat membuat fungsi rekursif definisi seperti ini.
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)
Misalnya kita perlu menemukan 30's akar kuadrat. Kita tahu bahwa hasilnya adalah antara 5 dan 6.
newtons_method(30,5)
nomor 30 dan perkiraan 5. Hasil dari setiap pemanggilan rekursif adalah:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
Hasil akhir adalah yang paling akurat perhitungan akar kuadrat dari angka. Ini adalah nilai yang sama dengan built-in fungsi matematika.sqrt().
Saya harap disebutkan di bawah kode yang akan menjawab pertanyaan anda.
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)