programing

왜 Python은 제곱근에 대해 "잘못된" 대답을 하는가?파이썬 2의 정수분할이란?

prostudy 2022. 3. 31. 20:33
반응형

왜 Python은 제곱근에 대해 "잘못된" 대답을 하는가?파이썬 2의 정수분할이란?

x = 16

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

난 내가 할 수 있는 걸 안다.import math사용하다sqrt, 그러나 나는 위에 대한 답을 찾고 있다.파이썬 2의 정수분할이란?이 동작은 파이톤 3에서 고정되어 있다.

파이톤 2에서는sqrt=x**(1/2)정수 분할을 한다. 1/2 == 0.

그래서 x는(1/2) 1이다(0).

틀린 게 아니라 다른 질문에 대한 정답이다.

산술 모듈을 가져오지 않고 제곱근을 계산하려면x**(1.0/2)또는x**(1/2.)정수 중 하나는 부동 소수여야 한다.

참고: Python 3에서는 그렇지 않다.1/2되지요0.5그리고1//2대신 정수 분할이 될 것이다.

다음과 같이 써야 한다.sqrt = x**(1/2.0), 그렇지 않으면 정수 분할과 식이 수행된다.1/2돌아온다0.

이 동작은 Python 2.x에서는 "정상"인 반면 Python 3.x에서는 "정상"이다.1/2로 평가하다.0.5. Python 2.x 코드가 3.x w.r.t.division write처럼 동작하도록 하려면from __future__ import division- 그럼1/2에 대해 평가할 것이다.0.5역호환성을 위해1//2에 대해 평가할 것이다.0.

그리고 기록상, 제곱근을 계산하는 선호되는 방법은 다음과 같다.

import math
math.sqrt(x)

/Python 2에서 정수 분할 수행:

>>> 1/2
0

숫자 중 하나가 부동액일 경우 예상대로 작동한다.

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

지금 보이는 것은 정수분할이다.기본적으로 부동 소수점 분할을 가져오려면

from __future__ import division

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

sqrt = x**(1.0/2)

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

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

참조URL: https://stackoverflow.com/questions/9595135/why-does-python-give-the-wrong-answer-for-square-root-what-is-integer-divisio

반응형