PEP 240 – Python에 유리수 리터럴 추가
- 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
번역·라이선스 안내
이 비공식 한국어 번역은 원문 Copyright 절의 Public Domain 조건에 따라 제공합니다. 원저자와 공식 원문은 그대로 표시합니다. 수정되지 않은 기준 원문 · 공식 최신판
초록
파이썬에 내장 유리수 타입을 추가하는 방안은 다른 PEP에서 제안된 바 있습니다. 이 PEP는 Python에서 ddd.ddd 부동소수점 리터럴을 유리수로 바꾸고, 정수가 아닌 나눗셈이 이를 반환하도록 수정할 것을 제안합니다.
BDFL 선언
이 PEP는 거부되었습니다. 근거 절에서 설명한 요구 사항은 십진 연산을 위한 PEP 327의 채택으로 어느 정도 해결되었습니다. Guido도 “유리수 연산은 ABC에서 기본 ‘정확한’ 연산이었지만 기대한 대로 작동하지 않았습니다”라고 언급했습니다. 2005년 6월 17일의 python-dev 논의를 참조하십시오 [1].
근거
유리수는 정확하고 놀랍지 않은 연산에 유용합니다. 유리수는 사람들이 다양한 수학 수업에서 배운 올바른 결과를 제공합니다. “명백한” 비정수 타입을 더 예측 가능한 의미론을 가진 타입으로 만들면, 부동소수점 수를 사용하는 것보다 초보 프로그래머를 덜 놀라게 할 것입니다. c.l.py와 tutor@python.org에 올라온 상당수의 게시물이 보여주듯이, 사람들은 종종 부동소수점 수의 이상한 의미론에 당황합니다. 예를 들어, round(0.98, 2)는 여전히 0.97999999999999998을 반환합니다.
제안
정규 표현식 '\d*.\d*'에 부합하는 리터럴은 유리수가 됩니다.
하위 호환성
유일한 하위 호환성 문제는 위에서 언급한 리터럴의 타입입니다. 다음과 같은 이행 방법이 제안됩니다:
- 승인 이후 다음 버전의 Python에서는
from __future__ import rational_literals를 사용하면 그러한 모든 리터럴이 유리수로 취급되도록 허용할 것입니다. - Python 3.0에서는
__future__문이 없는 상태에서 그러한 리터럴에 대해 경고가 발생하며, 이는 기본적으로 켜져 있을 것입니다. 경고 메시지에는__future__문에 관한 정보가 포함되며, 부동소수점 리터럴을 얻으려면 끝에 “e0”를 붙여야 한다는 것을 나타낼 것입니다. - Python 3.1에서는 이 경고가 기본적으로 꺼져 있을 것입니다. 이 경고는 24개월 동안 유지되며, 그 시점에 리터럴은 유리수가 되고 경고는 제거될 것입니다.
흔히 제기되는 반론
유리수는 느리고 메모리를 많이 사용합니다! (안심하십시오, float를 없애는 것이 아니라 문자 두 개를 추가하는 것뿐입니다. 1e0은 여전히 float일 것입니다)
유리수는 소수(decimal) 형태의 float로 나타나지 않으면 소수를 기대하는 사용자들에게 끔찍할 것입니다 (즉, str(.5)는 '1/2'가 아니라 '.5'를 반환해야 합니다). 이는 많은 유리수가 어느 시점에서 잘려야 한다는 것을 의미하며, 이로 인해 새로운 정밀도 손실이 발생합니다.
참고 자료
Copyright
This document has been placed in the public domain.