Bagaimana cara menghitung akar kuadrat dalam Python?

140

Mengapa Python memberikan jawaban "salah"?

x = 16

sqrt = x**(.5)  #returns 4
sqrt = x**(1/2) #returns 1

Ya, saya tahu import mathdan menggunakannya sqrt. Tetapi saya sedang mencari jawaban untuk hal di atas.

Merlin
sumber
31
Cobalah dengan Python 3, sudah diperbaiki;)
Mark Ransom
2
Hitung akar kuadrat dalam python dengan import mathdan kemudian x = math.sqrt(25)yang akan menetapkan nilai 5.0ke x.
Eric Leschinski
1
@Merlin - tolong jangan memutar kembali perubahan ke judul. Itu membuat pertanyaan lebih mudah ditemukan.
ChrisF
2
@ ChrisF - ini pertanyaan saya, mengatasi masalah muliple. Berhenti mengubah judul dan konten.
Merlin

Jawaban:

246

sqrt=x**(1/2)sedang melakukan pembagian integer. 1/2 == 0.

Jadi Anda menghitung x (1/2) pada contoh pertama, x (0) pada detik.

Jadi itu tidak salah, itu jawaban yang tepat untuk pertanyaan yang berbeda.

smessing
sumber
64
"Jadi itu tidak salah, itu jawaban yang tepat untuk pertanyaan yang berbeda" - love it! - pikir saya mungkin menantang diri saya untuk menggunakan frasa ini lebih sering!
Thomas Kimber
6
di Python 3.6 Anda mendapatkan jawaban yang benar untuk pertanyaan yang pertama kali Anda tanyakan.
vwvan
2
Metode kedua dapat dihitung sebagai:sqrt = x**(float(1)/2)
VM_AI
117

Anda harus menulis sqrt = x**(1/2.0):, jika tidak, divisi integer dilakukan dan ekspresi 1/2kembali 0.

Perilaku ini "normal" di Python 2.x, sedangkan di Python 3.x 1/2dievaluasi menjadi 0.5. Jika Anda ingin kode Python 2.x Anda berperilaku seperti 3.x wrt division write from __future__ import division- maka 1/2akan mengevaluasi ke 0.5dan untuk kompatibilitas mundur, 1//2akan dievaluasi 0.

Sebagai catatan, cara yang lebih disukai untuk menghitung akar kuadrat adalah ini:

import math
math.sqrt(x)
Óscar López
sumber
23
import math
math.sqrt( x )

Ini merupakan tambahan yang sepele pada rantai jawaban. Namun karena Subjek adalah hit google yang sangat umum, ini pantas untuk ditambahkan, saya percaya.

pembisik
sumber
11

/ melakukan pembagian integer di Python 2:

>>> 1/2
0

Jika salah satu angka adalah pelampung, ia berfungsi seperti yang diharapkan:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
Niklas B.
sumber
7

Apa yang Anda lihat adalah pembagian bilangan bulat. Untuk mendapatkan pembagian floating point secara default,

from __future__ import division

Atau, Anda bisa mengubah 1 atau 2 dari 1/2 menjadi nilai floating point.

sqrt = x**(1.0/2)
gfortune
sumber
2

Ini mungkin sedikit terlambat untuk dijawab tetapi cara paling sederhana dan akurat untuk menghitung akar kuadrat adalah metode newton.

Anda memiliki angka yang ingin Anda hitung akar kuadratnya (num)dan Anda dapat menebak akar kuadratnya (estimate). Perkiraan bisa berupa angka yang lebih besar dari 0, tetapi angka yang masuk akal memperpendek kedalaman panggilan rekursif secara signifikan.

new_estimate = (estimate + num / estimate) / 2

Baris ini menghitung perkiraan yang lebih akurat dengan 2 parameter tersebut. Anda bisa meneruskan nilai new_estimate ke fungsi dan menghitung new_estimate lain yang lebih akurat daripada yang sebelumnya atau Anda bisa membuat definisi fungsi rekursif 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)

Sebagai contoh, kita perlu mencari akar kuadrat 30-an. Kita tahu bahwa hasilnya adalah antara 5 dan 6.

newtons_method(30,5)

nomor adalah 30 dan perkiraan adalah 5. Hasil dari setiap panggilan rekursif adalah:

5.5
5.477272727272727
5.4772255752546215
5.477225575051661

Hasil terakhir adalah perhitungan paling akurat dari akar kuadrat angka. Ini adalah nilai yang sama dengan fungsi math.sqrt () bawaan.

gunesevitan
sumber
1

Mungkin cara mudah untuk mengingat: tambahkan titik setelah pembilang (atau penyebut)

16 ** (1. / 2)   # 4
289 ** (1. / 2)  # 17
27 ** (1. / 3)   # 3
Vikrant
sumber
0

Anda dapat menggunakan NumPy untuk menghitung akar kuadrat dari array:

 import numpy as np
 np.sqrt([1, 4, 9])
sushmit
sumber
1
Ini adalah cara yang lebih alami untuk melakukan akar kuadrat, tetapi bagaimana cara menjawab pertanyaan (diakui memang menjawab pertanyaan dalam judul, tetapi bukan pertanyaan aktual dalam tubuh (ya, itu adalah judul yang buruk))?
Peter Mortensen
-1

Saya harap kode yang disebutkan di bawah ini 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) 
Mohammad Ali Shaikh
sumber
Harap edit dan tambahkan penjelasan singkat mengapa ini berhasil. Hanya kodenya tidak terlalu membantu.
wjandrea