왜 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
'Programing' 카테고리의 다른 글
대용량 텍스트 파일을 메모리에 로드하지 않고 한 줄씩 읽는 방법 (0) | 2022.03.29 |
---|---|
어떤 방법으로 VueJS 구성 요소를 파괴하는 방법? (0) | 2022.03.29 |
대응 테스트 라이브러리:useLocation()이 포함된 구성 요소를 테스트하는 방법 (0) | 2022.03.29 |
python Simple을 실행할 수 있는가?로컬 호스트에서만 HTTPServer를 사용하시겠습니까? (0) | 2022.03.29 |
Vue.js—v-model과 v-bind의 차이 (0) | 2022.03.28 |