Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy finfo()로 float 데이터 타입의 최소값·최대값(머신 한계) 확인하기

Python에서 float 타입의 머신 한계(machine limits) 정보를 확인하려면 NumPy가 제공하는 numpy.finfo() 메서드를 사용하면 됩니다. 이 함수는 지정된 부동 소수점(floating point) 데이터 타입이 표현할 수 있는 값의 범위와 정밀도 관련 정보를 담은 객체를 반환합니다.

finfo()의 첫 번째 매개변수에는 조사하고 싶은 float 데이터 타입(예: np.float16, np.float32, np.float64)을 전달합니다. 반환된 객체의 주요 속성은 다음과 같습니다.

  • min : 해당 dtype이 표현할 수 있는 최소값
  • max : 해당 dtype이 표현할 수 있는 최대값
  • eps : 기계 엡실론(machine epsilon), 즉 1.0과 그 다음으로 표현 가능한 값 사이의 가장 작은 차이
  • resolution : 근삿값 계산의 대략적인 분해능(resolution)

실행 절차

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

float16 타입 확인하기

a = np.finfo(np.float16)
print("float16 타입의 최소값...\n", a.min)
print("float16 타입의 최대값...\n", a.max)

float32 타입 확인하기

b = np.finfo(np.float32)
print("\nfloat32 타입의 최소값...\n", b.min)
print("float32 타입의 최대값...\n", b.max)

float64 타입 확인하기

c = np.finfo(np.float64)
print("\nfloat64 타입의 최소값...\n", c.min)
print("float64 타입의 최대값...\n", c.max)

전체 예제 코드

import numpy as np

# float 타입의 머신 한계 정보를 얻으려면 Python Numpy의 numpy.finfo() 메서드를 사용한다.
# 첫 번째 매개변수는 부동 소수점 타입, 즉 정보를 얻고자 하는 float 데이터 타입이다.

# float16 타입 확인
# min은 해당 dtype의 최소값, max는 해당 dtype의 최대값이다.
a = np.finfo(np.float16)
print("float16 타입의 최소값...\n", a.min)
print("float16 타입의 최대값...\n", a.max)

# float32 타입 확인
b = np.finfo(np.float32)
print("\nfloat32 타입의 최소값...\n", b.min)
print("float32 타입의 최대값...\n", b.max)

# float64 타입 확인
c = np.finfo(np.float64)
print("\nfloat64 타입의 최소값...\n", c.min)
print("float64 타입의 최대값...\n", c.max)

출력 결과

float16 타입의 최소값...
-65500.0
float16 타입의 최대값...
65500.0

float32 타입의 최소값...
-3.4028235e+38
float32 타입의 최대값...
3.4028235e+38

float64 타입의 최소값...
-1.7976931348623157e+308
float64 타입의 최대값...
1.7976931348623157e+308

정리

비트 수가 늘어날수록(float16 → float32 → float64) 표현할 수 있는 값의 범위가 크게 확장되고 정밀도도 향상됩니다. 일반적으로 float16은 약 ±65,500까지, float32는 약 ±3.4×1038, float64는 약 ±1.8×10308까지 표현할 수 있습니다. 과학 계산이나 딥러닝처럼 수치 범위와 오버플로우가 중요한 작업에서는 np.finfo()를 활용해 각 dtype의 한계를 미리 파악하는 것이 좋습니다.