PEP 239 – 파이썬에 유리수 타입 추가
- Author:
- Christopher A. Craig <python-pep at ccraig.org>, Moshe Zadka <moshez at zadka.site.co.il>
- Status:
- Rejected
- Type:
- Standards Track
- Created:
- 11-Mar-2001
- Python-Version:
- 2.2
- Post-History:
- 16-Mar-2001
Table of Contents
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
파이썬에는 무한히 정밀한 유리수의 의미론을 갖는 숫자 타입이 없습니다. 이 제안서는 그러한 타입의 의미론을 설명하고, 그러한 타입을 지원하기 위한 내장 함수와 리터럴을 제안합니다. 이 PEP는 유리수를 위한 리터럴을 제안하지 않으며, 이는 다른 PEP에 남겨둡니다.
이론적 근거
유리수 연산은 때때로 더 느리고 메모리를 더 많이 사용하지만(일반적으로는 무한정 그러함), 숫자에 대한 수학적 이상에 더 가깝게 부합하며, 초보자에게 덜 놀라운 동작을 보이는 경향이 있습니다. 유리수에 대한 많은 파이썬 구현이 작성되었지만, 이들 중 어느 것도 코어에 존재하지 않으며 어떤 식으로도 문서화되어 있지 않습니다. 이로 인해 파이썬에 덜 능숙한 사람들이 이를 훨씬 더 접근하기 어렵게 되었습니다.
RationalType
RationalType라는 새로운 숫자형이 추가될 것입니다. 단항 연산자는 당연한 동작을 수행할 것입니다. 이항 연산자는 정수와 롱 정수를 유리수로, 유리수를 부동소수점수와 복소수로 강제 변환할 것입니다.
다음 속성이 지원될 것입니다: .numerator와 .denominator. 언어 정의는 다음을 보장할 것입니다.:
r.denominator * r == r.numerator
분자와 분모의 최대공약수(GCD)가 1이고 분모가 양수라는 것입니다.
r.trim(max_denominator) 메서드는 abs(s.denominator) <= max_denominator를 만족하는, r에 가장 가까운 유리수 s를 반환할 것입니다.
rational() 내장 함수
이 함수는 rational(n, d=1) 시그니처를 가질 것입니다. n과 d는 둘 다 정수, 롱 정수, 또는 유리수여야 합니다. 다음을 보장합니다.:
rational(n, d) * d == n
미해결 쟁점
- 이 타입은 rational이 아니라 rat이라고 불러야 할지도 모릅니다. 어떤 사람은 complex, real, rational, integer라는 이름의 “추상적인” 순수 수학 타입과, float, rat, long, int 같은 이름의 “구체적인” 표현 타입을 두자고 제안했습니다.
- 정수 값을 갖는 유리수를 시퀀스 인덱스로 허용해야 할지 여부입니다. 예를 들어,
s[5/3 - 2/3]가s[1]과 동등해야 할지 여부입니다. - 유리수에 대해
shift와mask연산자를 허용해야 합니까? 정수 값을 갖는 유리수에 대해서는 어떻습니까? - Marcin ‘Qrczak’ Kowalczyk는 c.l.py에서 정수와 유리수를 통합하는 것에 대한 찬반 논거를 잘 요약했습니다.
정수와 유리수를 통합하는 것에 찬성하는 논거:
2 == 2/1이고 아마도str(2/1) == '2'이기 때문에, 객체들이 같아 보이지만 다르게 동작하는 데서 오는 놀라움을 줄여줍니다.- 나눗셈에 나머지가 없다는 것을 알고 있을 때는
/를 정수 나눗셈에 자유롭게 사용할 수 있습니다(만약 제가 틀려서 나머지가 있다면, 나중에 아마 예외가 발생할 것입니다).
반대하는 논거:
/의 결과를 시퀀스 인덱스로 사용할 때, 이는 보통 오류이며 일부 데이터에서는 프로그램이 동작하도록 만들어 그 오류를 숨겨서는 안 됩니다. 다른 데이터에서는 오류가 발생할 것이기 때문입니다.- (이는 통합 이후 int와 rational이 서로 다른 타입이 된다고 가정합니다:) 타입은 값에 좌우되는 경우가 거의 없어야 합니다. 변수의 타입을 알고 있을 때 추론하기가 더 쉽습니다: 그것을 어떻게 사용할 수 있는지 알기 때문입니다. 어떤 것이 int라는 것을 판별할 수 있으면 이 위치에서 사용되는 다른 객체들도 int일 것이라고 기대할 수 있습니다.
- (이는 그 둘에 대해 같은 타입을 가정합니다:) Int는 그 자체로 좋은 타입이며, rational과 섞여서는 안 됩니다. 어떤 것이 정수라는 사실은 그 타입에 관한 진술로 표현될 수 있어야 합니다. 많은 연산이 int를 요구하며 rational을 받아들이지 않습니다. 그것들을 서로 다른 타입으로 생각하는 것이 자연스럽습니다.
참고 문헌
Copyright
This document has been placed in the public domain.