왜 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' 카테고리의 다른 글
리액션 후크를 사용하여 "refs"를 동적으로 추가하는 방법? (0) | 2022.03.31 |
---|---|
ReactRedex TypeScript 앱이 iPhone 6 iOS 12.0.1(공백색 화면인 경우)을 제외한 모든 곳에서 작동하는 이유는? (0) | 2022.03.31 |
별도의 구성 요소에 가져오기 기능 삽입 (0) | 2022.03.31 |
라우터 내부 다음('profile').각자가 오류를 발생시키기 전에 이를 파악하기 위해 도움이 필요함 (0) | 2022.03.31 |
v-data-table에 클릭 이벤트를 추가하는 방법 (0) | 2022.03.30 |