HOWTO · Python

Python에서 최대 부동 소수점 값 찾기

이 기사에는 Python에서 float 데이터 유형의 최대값을 찾는 두 가지 방법이 포함되어 있습니다. 그 중 하나는 sys 모듈의 float_info.max를 사용하는 것이고 두 번째 방법은 numpy 라이브러리의 finfo() 함수를 사용하는 것입니다.

이 페이지의 내용

이 예제에 표시된 런타임에서 Python의 내장 float 형식이 지원하는 가장 큰 유한값은 1.7976931348623157e+308입니다. 현재 런타임의 한계값을 가져오려면 sys.float_info.max를 사용하세요. NumPy를 사용하는 코드라면 numpy.finfo(dtype).max로 선택한 부동 소수점 dtype의 최댓값을 구할 수 있습니다. 두 표현식은 서로 다른 범위를 다룹니다. 하나는 Python의 내장 float 한계값이고, 다른 하나는 전달한 dtype에 따라 달라집니다.

sys.float_info.max로 가장 큰 유한 float 찾기

sys 모듈의 float_info는 내장 float 표현에 관한 세부 정보를 담은 명명된 튜플이며, 여기에는 가장 큰 유한값도 포함됩니다. 상한값만 필요하다면 max 속성을 선택하세요. 튜플 전체를 출력하면 정밀도와 가장 작은 양의 정규화 값 같은 추가 정보도 함께 표시됩니다.

표준 라이브러리로 다음 값을 가져와 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import sys

print(sys.float_info.max)
1.7976931348623157e+308

이 표현식은 유한한 Python float 값을 반환합니다. 표시되는 십진수 형식은 1.7976931348623157e+308입니다. 유한 센티널을 설정하거나 계산 범위를 확인하는 등 내장 형식의 유한 상한값이 필요할 때 이 값을 사용하세요. 이 값은 Python의 모든 숫자 형식에 적용되는 것은 아닙니다. 예를 들어 정수에는 이 부동 소수점 한계값이 적용되지 않습니다.

부동 소수점 형식에는 numpy.finfo() 사용하기

NumPy 배열에서는 사용하는 dtype을 numpy.finfo()에 전달해 해당 dtype의 한계값을 확인하세요. max 속성은 그 dtype이 지원하는 가장 큰 유한값입니다. 다음 예제는 numpy.float64를 선택합니다. 이 값은 Python의 내장 float 한계값을 바꾸지 않으며, 모든 NumPy dtype의 한계값을 나타내지도 않습니다.

numpy.float64를 사용하는 다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

print(np.finfo(np.float64).max)
1.7976931348623157e+308

다른 부동 소수점 dtype을 전달하면 그에 해당하는 한계값을 확인할 수 있습니다. 배열 계산에 사용할 상한값을 정하거나 dtype이 지원하는 범위를 확인할 때 유용합니다. 함수 이름의 철자에 유의하세요. numpy.finfo(dtype)는 부동 소수점의 기계 한계값을 알려주는 함수입니다. 이 예제를 실행하는 환경에는 NumPy가 설치되어 있어야 합니다. 위의 표준 라이브러리 방식에는 NumPy가 필요하지 않습니다.

유한 최댓값과 무한대의 차이

가장 큰 유한값과 양의 무한대는 서로 다릅니다. sys.float_info.max는 유한한 숫자입니다. 반면 float(‘inf’)와 math.inf는 모든 유한 float보다 큰 특수값인 양의 무한대를 나타냅니다. 계산이나 알고리즘에서 상한이 없는 센티널이 필요한 경우에는 무한대를 사용하세요. 가장 큰 유한값이 필요할 때는 무한대를 사용하지 마세요.

유한 최댓값과 양의 무한대를 비교하는 다음 예제를 실행해 보세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import math
import sys

largest_finite = sys.float_info.max
positive_infinity = float("inf")

print(largest_finite)
print(math.inf == positive_infinity)
print(largest_finite < positive_infinity)
1.7976931348623157e+308
True
True

math.inf도 양의 무한대를 나타내며, -math.inf는 음의 무한대를 나타냅니다. 둘 다 가장 큰 유한 float는 아닙니다. 변수에 이름을 붙이거나 결과를 검증할 때 이 차이를 기억하세요. 유한 여부를 확인하는 검사와 가장 큰 유한값을 기준으로 비교하는 검사는 서로 다른 질문에 답합니다. 내장 형식의 한계값에는 sys.float_info.max를 사용하고, NumPy 부동 소수점 형식에는 실제 데이터에 사용하는 dtype을 지정해 numpy.finfo(dtype).max를 사용하세요.