Python Infinity - 주의 사항이 있습니까?
Python은 양의 무한대와 음의 무한대를 가지고 있습니다.
float("inf"), float("-inf")
이것은 단지 주의해야 할 기능의 유형처럼 보입니다.제가 주의해야 할 것이 있습니까?
Python의 구현은 지침으로 사용할 수 있는 IEEE-754 표준을 꽤 잘 따르고 있지만 컴파일된 기본 시스템에 의존하므로 플랫폼 차이가 발생할 수 있습니다.최근에는 "inf"뿐만 아니라 "inf"도 허용하는 수정이 적용되었지만, 여기서는 그것이 사소한 것입니다.
다음 섹션은 IEEE 부동 소수점 산술을 올바르게 구현하는 모든 언어에 동일하게 적용됩니다. Python에만 국한된 것은 아닙니다.
부등식 비교
무한대를 다룰 때 그리고 더 큰 것을 다룰 때.>
보다 <
연산자, 다음 카운트:
- 을포한임수의의를 포함한
+inf
보다 높습니다.-inf
- 을포한임수의의를 포함한
-inf
낮음+inf
+inf
보다 높지도 낮지도 않습니다.+inf
-inf
보다 높지도 낮지도 않습니다.-inf
- 에 관련된 모든 비교.
NaN
inf
높지도 낮지도 .NaN
)
동등성에 대한 비교
때 평과비교을때했등때,,+inf
그리고.+inf
동등한 것, 있는 그대로.-inf
그리고.-inf
이것은 많은 논쟁의 여지가 있는 문제이고 여러분에게 논란의 여지가 있는 것처럼 들릴 수도 있지만, 이것은 IEEE 표준에 있고 Python은 바로 그렇게 행동합니다.
물이야론.+inf
는 동와하않은과 않습니다.-inf
그고포함모것든들한리▁including것thing들,▁every를 포함한 모든 것.NaN
자체는 그자는체, 불합니다등평에▁to와 같지 .NaN
.
무한대를 사용
무한대를 사용하는 대부분의 계산은 두 피연산자가 무한대가 아닌 한 무한대를 생성합니다. 연산 분할이나 모듈로 또는 0을 사용하는 곱셈을 사용하는 경우 다음과 같은 특별한 규칙을 염두에 두어야 합니다.
을 곱하면 이 됩니다.
NaN
수를 무한대로 때, (나) 은눌떤수, 산출량로를 합니다.
0.0
또는 ².() 음의 를 양의 무한대로되지 않으므로 (으)ㄹ 수 없습니다.
NaN
.에를 할 때.
inf - inf
.NaN
;에를 할 때.
inf - -inf
는 결는과입니다.inf
;에를 할 때.
-inf - inf
는 결는과입니다.-inf
;에를 할 때.
-inf - -inf
.NaN
.추가할 때도 마찬가지로 놀랄 수 있습니다.
에를 할 때.
inf + inf
는 결는과입니다.inf
;에를 할 때.
inf + -inf
.NaN
;에를 할 때.
-inf + inf
.NaN
;에를 할 때.
-inf + -inf
는 결는과입니다.-inf
.용사를
math.pow
,pow
또는**
까다롭군요, 그래야 할 것처럼 행동하지 않기 때문입니다. 이중 플로트를 맞출 수때반환해야 함) 시킵니다.inf
또는-inf
하며 " 르게동고다중하반환합니다를나음올바하작▁either다반니합환▁behaves▁it▁returns▁correctly"를 반환합니다.inf
또는0.0
가 두 번 다 인 같 때 을 과 음 가 째 수NaN
그것은 돌아옵니다.NaN
가 첫 번 아 한 닌 이 장 주가 한1.0
문서에서 모두 다루는 것이 아니라 더 많은 문제가 있습니다.math.exp
는 와동한문겪니다습를제와 같은 있습니다.math.pow
오버플로를 해결하기 위한 해결책은 다음과 유사한 코드를 사용하는 것입니다.try: res = math.exp(420000) except OverflowError: res = float('inf')
메모들
참고 1: IEEE 표준에 정의된 추가적인 주의 사항으로, 계산 결과가 언더(under) 또는 오버플로(overflow) 오류가 아니라 플러스(positive) 또는 마이너스(negative) 무한대(negative)가 될 것입니다.1e308 * 10.0
확량수inf
.
참고 2: 사용한 모든 계산은NaN
아온다를 합니다.NaN
와 교 해 수 있 것 은 는 볼 비 것 은과의 .NaN
를 포함하여, 을 포함하여NaN
가 그자체가입니다.false
함수를 사용하여 숫자가 정말인지 확인해야 합니다.NaN
.
참고 3: Python은 쓰기를 지원하지만float('-NaN')
호가무니다됩에 가 없기 부호가 존재하지 않기 때문입니다.NaN
내부적으로나누면,-inf / +inf
는 결는과입니다.NaN
,것은 아니다.-NaN
(그런 것은 없습니다).
참고 4: Python은 컴파일된 C 또는 Java 라이브러리에 의존하며 모든 기본 시스템이 이 모든 동작을 올바르게 구현하는 것은 아니기 때문에 위의 모든 동작에 의존하도록 주의하십시오.확인하려면 계산을 수행하기 전에 무한대를 테스트하십시오.
◦ 최근 버전 3.2 이후를 의미합니다.
0과 의 0을 과 같습니다. ²) 부동을소은양및음 0지로다음같다습니과므원하수수점수을다같습니▁support다).x / float('inf')
그것의 기호를 유지하고 그리고.-1 / float('inf')
확량수-0.0
,1 / float(-inf)
확량수-0.0
,1 / float('inf')
확량수0.0
그리고.-1/ float(-inf)
확량수0.0
또한, 기호가 참이 되지 않으려면 수동으로 확인해야 합니다.
다음을 포함하는 간단한 산술에서 not-a-number(NaN) 값을 얻을 수 있습니다.inf
:
>>> 0 * float("inf")
nan
일반적으로 다음을 얻을 수 없습니다.inf
일반적인 산술 계산을 통한 값:
>>> 2.0**2
4.0
>>> _**2
16.0
>>> _**2
256.0
>>> _**2
65536.0
>>> _**2
4294967296.0
>>> _**2
1.8446744073709552e+19
>>> _**2
3.4028236692093846e+38
>>> _**2
1.157920892373162e+77
>>> _**2
1.3407807929942597e+154
>>> _**2
Traceback (most recent call last):
File "<stdin>", line 1, in ?
OverflowError: (34, 'Numerical result out of range')
그inf
값은 비정상적인 의미론을 가진 매우 특별한 값으로 간주되므로, 더 나은 정보를 아는 것입니다.OverflowError
에는 예외적인 경우가 됩니다.inf
값이 자동으로 계산에 주입됩니다.
C99도 마찬가지입니다.
모든 최신 프로세서에서 사용되는 IEEE 754 부동소수점 표현에는 양의 무한대(sign=0, exp=~0, frac=0), 음의 무한대(sign=1, exp=~0, frac=0) 및 많은 NaN(not a Number: exp=~0, frac≠0)을 위해 예약된 몇 가지 특수 비트 패턴이 있습니다.
걱정해야 할 모든 것: 일부 산술은 부동 소수점 예외/트랩을 발생시킬 수 있지만 이러한 "관심 있는" 상수에만 제한되지는 않습니다.
지금까지 아무도 언급하지 않은 경고를 발견했습니다.현실적인 상황에서 자주 나올지는 모르겠지만, 완성도를 위해 여기에 있습니다.
일반적으로 숫자 모듈로 무한대를 계산하면 자체가 플로트로 반환되지만 분수 모듈로 무한대가 반환됩니다.nan
(숫자가 아님).다음은 예입니다.
>>> from fractions import Fraction
>>> from math import inf
>>> 3 % inf
3.0
>>> 3.5 % inf
3.5
>>> Fraction('1/3') % inf
nan
파이썬 버그 트래커에 대한 문제를 제출했습니다.그것은 https://bugs.python.org/issue32968 에서 볼 수 있습니다.
업데이트: 이것은 Python 3.8에서 수정될 예정입니다.
매우 나쁜 경고: 0으로 나눗셈
순식간에1/x
분수, 대최x = 1e-323
그렇다.inf
그러나 언제x = 1e-324
혹은 거의 던지지 않습니다.ZeroDivisionError
>>> 1/1e-323
inf
>>> 1/1e-324
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division by zero
그러니 조심하세요!
언급URL : https://stackoverflow.com/questions/1628026/python-infinity-any-caveats
'programing' 카테고리의 다른 글
Firebase Console에서 Google 프로젝트를 제거하는 방법은 무엇입니까? (0) | 2023.06.12 |
---|---|
파이썬 요소트리 모듈:"find", "findall" 메서드를 사용할 때 일치하는 요소를 찾기 위해 XML 파일의 네임스페이스를 무시하는 방법 (0) | 2023.06.12 |
iOS에서 뷰 계층을 검사하려면 어떻게 해야 합니까? (0) | 2023.06.12 |
Oracle의 SYS_GUID() UUID RFC 4122가 호환됩니까? (0) | 2023.06.12 |
작업 시트에 UI Picker View 및 버튼 추가 - 어떻게? (0) | 2023.06.12 |