파이썬에서 제곱근을 어떻게 계산합니까?


140

파이썬이 왜 "잘못된"대답을합니까?

x = 16

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

네, 알고 import math있습니다 sqrt. 그러나 위의 답변을 찾고 있습니다.


31
Python 3에서 사용해보십시오. 고정되어 있습니다.)
Mark Ransom

2
파이썬의 제곱근을 계산 import math다음과 x = math.sqrt(25)값에 할당되는 5.0X로합니다.
Eric Leschinski

1
@Merlin-제목 변경 사항을 롤백하지 마십시오. 질문을보다 쉽게 ​​찾을 수 있습니다.
ChrisF

2
@ChrisF-내 질문은 여러 문제를 해결합니다. 제목과 내용 변경을 중지하십시오.
멀린

답변:


246

sqrt=x**(1/2)정수 나누기를하고 있습니다. 1/2 == 0.

따라서 첫 번째 인스턴스에서 x (1/2) 를 계산 하고 두 번째 인스턴스에서 x (0) 을 계산합니다.

따라서 잘못된 것이 아닙니다. 다른 질문에 대한 정답입니다.


64
"그래서 틀린 것이 아닙니다. 다른 질문에 대한 정답입니다."-사랑합니다! -이 문구를 더 자주 사용하도록 도전 할 수도 있습니다!
Thomas Kimber

6
Python 3.6에서는 첫 번째 질문에 대한 정답을 얻습니다.
vwvan

2
두 번째 방법은 다음과 같이 계산할 수 있습니다.sqrt = x**(float(1)/2)
VM_AI

117

작성해야합니다. sqrt = x**(1/2.0)그렇지 않으면 정수 나누기가 수행되고 표현식이 1/2반환됩니다.0 .

이 동작은 Python 2.x에서 "정상"인 반면 Python 3.x에서는로 1/2평가됩니다 0.5. 당신이 당신의 파이썬 2.x에서 코드가 3.X의 WRT 부문 쓰기처럼 행동하려는 경우 from __future__ import division- 다음 1/2에 평가합니다 0.5및 이전 버전과의 호환성을 위해 1//2로 평가합니다 0.

그리고 기록을 위해 제곱근을 계산하는 기본 방법은 다음과 같습니다.

import math
math.sqrt(x)

23
import math
math.sqrt( x )

답변 체인에 사소한 추가 사항입니다. 그러나 주제는 매우 일반적인 Google 히트이므로 추가해야합니다.


11

/ 파이썬 2에서 정수 나누기를 수행합니다.

>>> 1/2
0

숫자 중 하나가 부동 소수점이면 예상대로 작동합니다.

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

7

당신이보고있는 것은 정수 나누기입니다. 기본적으로 부동 소수점 나누기를 얻으려면

from __future__ import division

또는 1/2의 1 또는 2를 부동 소수점 값으로 변환 할 수 있습니다.

sqrt = x**(1.0/2)

2

대답하기에는 약간 늦었지만 제곱근을 계산하는 가장 간단하고 정확한 방법은 뉴턴의 방법입니다.

제곱근을 계산할 숫자가 있고 제곱근을 (num)추측 할 수 있습니다 (estimate). 견적은 0보다 큰 숫자 일 수 있지만 의미가있는 숫자는 재귀 호출 깊이를 크게 단축시킵니다.

new_estimate = (estimate + num / estimate) / 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와 6 사이라는 것을 알고 있습니다.

newtons_method(30,5)

각 재귀 호출의 결과는 다음과 같습니다.

5.5
5.477272727272727
5.4772255752546215
5.477225575051661

마지막 결과는 제곱근의 가장 정확한 계산입니다. 내장 함수 math.sqrt ()와 동일한 값입니다.


1

아마도 기억하는 간단한 방법 : 분자 (또는 분모) 뒤에 점을 추가하십시오

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

0

NumPy를 사용하여 배열의 제곱근을 계산할 수 있습니다.

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

1
이것은 제곱근을하는보다 자연스러운 방법이지만 어떻게 질문에 대답합니까?
피터 Mortensen

-1

아래 언급 된 코드가 귀하의 질문에 대답하기를 바랍니다.

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) 

이것이 작동하는 이유에 대한 간단한 설명을 편집 하고 추가 하십시오 . 코드만으로는 도움이되지 않습니다.
wjandrea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.