오버플로우 (Overflow)
너무 큰 수를 표현하려 할 때 발생
예: 1.0 × 10^500 같은 수는 부동소수점 포맷으로는 표현할 수 없음
- IEEE 754에서는 이런 경우, 양의 무한대(+∞) 또는 음의 무한대(-∞) 로 처리됨
- 계산 도중 오류가 발생하지는 않지만, 결과가 Infinity로 나옴
import numpy as np
np.exp(1000) # 너무 커서 overflow 발생 → inf 반환
언더플로우 (Underflow)
너무 작은 수(0에 가까운 수)를 표현하려 할 때 발생
- 수가 너무 작아서 0으로 수렴하거나, 서브노멀(subnormal) 값으로 표현됨
- 오버플로우처럼 Infinity는 아니지만, 정밀도 손실이 발생할 수 있음
import numpy as np
np.float32(1e-50) # underflow 발생 → 0.0으로 처리됨

서브노멀(Subnormal) 수란?
정규화(Normalized)된 부동소수점 수는 항상 가수 부분의 가장 앞자리가 1이어야 합니다.
IEEE 754에서는 이를 "1.xxx…" 형태로 간주하고, **이 1은 저장하지 않고 생략(hidden bit)**합니다.
하지만, 숫자가 너무 작아져서 이 가장 앞자리 1을 유지할 수 없을 때, 이를 포기하고 표현하는 방식이 서브노멀 수입니다.
- 지수가 최소값보다 더 작을 때 (Exponent = 0)
- 가수 앞의 숨겨진 1(hidden bit)을 사용하지 않음
- 대신 0.xxx… 형태로 표현

예시 (단정도 32비트 기준)
- 가장 작은 정규화 수:
≈ 1.18 × 10^-38 - 서브노멀 최소값:
≈ 1.4 × 10^-45
즉, 서브노멀 덕분에 0보다 큰 아주 작은 수들을 표현할 수 있게 되죠!
'Computer Science' 카테고리의 다른 글
| 디자인 패턴 - 옵저버 패턴 (0) | 2025.04.22 |
|---|---|
| 디자인 패턴 - 팩토리 패턴 (0) | 2025.04.22 |
| 디자인 패턴 - 싱글톤 패턴 (0) | 2025.04.22 |
| ARM 프로세서 (5) | 2025.04.18 |
| 고정 소수점 부동 소수점 (0) | 2025.04.18 |