다음과 같은 수치 정밀도 문제를 고려하십시오.
import numpy as np
np.log10(1e-324) # -inf & divide-by-zero
np.log10(1e+309) # +inf
np.round(x, +308) # inf
np.round(x, +309) # nan
np.round(x, -308) # nan
이 숫자는 내 컴퓨터에서 오버플로 (?)를 유발할만큼 극단적입니다.
numpy에서 이에 대한 관련 문서는 어디에 있습니까? 그리고이 값을 어떻게 정확하게 예측할 수 있습니까?
관련 전체 문서는 아마도 NumPy 자체가 아니지만 IEEE 754 표준을 따릅니다 .
그것에 대한 아주 좋은 설명은 GeeksforGeeks-IEEE 표준 754 부동 소수점 숫자에 있습니다.
이 표준은 숫자 가 아닌 피연산자 (무한대, NAN) 를 사용하는 기본 수학 연산의 결과를 규정합니다. 위의 링크에서 페이지 끝을 참조하세요. 알고리즘을 수행 할 때 프로세서의 부동 소수점 단위 (FPU)가이를 따릅니다. NumPy와 기능에 대한 (등 np.log10()
또는 np.round()
당신의 예에서).
NumPy (및 Python)가 자체적 으로 수행하는 작업 은
1e+309
를 무한대 로 암묵적으로 변환 ,1e-324
를 0 으로 암묵적으로 변환합니다 .따라서 이론적으로는 존재하지 않는 np.log10(1e-324)
로 계산 np.log10(0)
되지만, 그럼에도 불구하고 알고리즘은이 0 값을 사용하여 계산합니다 (효과적으로 한계 계산).
이 계산을 수행하는 0으로 나누기 발생하지만 알고리즘 잡는 동안 ZeroDivisionError
예외와 제기 RuntimeWarning
가이 제로 값이 0에 "포지티브"으로 간주하기 때문에, 그것을 대신하여, 즉 분할 (양 또는 음) 유한 수가 있다 (바치는 양수 또는 음수 무한대의 결과).
결과는 물론 음의 무한대, 더 작고 작은 양의 값 ( "무한한"작은 값)의 로그 한계입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다