인지야공/수학·공학 노트/2번째 글
부동소수점 — fp32·fp16·bf16의 범위와 정밀도
1. 부동소수점의 구조
컴퓨터는 실수를 부호 · 지수 · 가수(유효숫자) 세 조각으로 담는다.
- 지수 비트가 많을수록 범위가 넓다(아주 크거나 작은 수를 담는다).
- 가수 비트가 많을수록 정밀도가 높다(가까운 두 수를 구분한다).
같은 16비트라도 이 둘을 어떻게 나누느냐가 fp16과 bf16을 가른다.
2. 직접 재 보기

| 포맷 | 최대값 | 1 근처 간격(정밀도) |
|---|---|---|
| fp32 | 3.4e38 | 1.2e-07 |
| fp16 | 6.55e4 (좁음) | 9.8e-04 (정밀) |
| bf16 | 3.4e38 (fp32급) | 7.8e-03 (덜 정밀) |
실제로 넣어 보면 차이가 분명하다.
| 값 | fp16 | bf16 |
|---|---|---|
| 70,000 | inf (넘침) | 70,144 |
| 1e-8 | 0 (사라짐) | 1e-8 |
fp16은 정밀하지만 범위가 좁아 큰 값은 넘치고(65,504 초과) 작은 값은 0이 된다. bf16은 fp32와 같은 범위를 가져 넘침·사라짐이 없지만 정밀도가 낮다.
3. 딥러닝에서의 의미
- fp16 학습: 작은 그라디언트가 0으로 사라진다 → 손실 스케일링(손실을 ×1024 해서 범위 안으로 옮긴 뒤 되돌림)이 필요하다(혼합정밀도 편).
- bf16 학습: 범위가 넓어 손실 스케일링 없이도 안정적이라, 요즘 대형 학습의 기본이 됐다(정밀도 손실은 신경망이 잘 견딘다).
- 양자화(양자화 편): 더 극단적으로 정수 4~8비트로 담는다. 여기서도 범위를 정하는 스케일이 핵심이다.
4. 한 줄 요약
부동소수점은 지수와 가수, 곧 범위와 정밀도의 나눠 갖기다. fp16은 좁고 정밀(65,504에서 넘침, 1e-8은 0), bf16은 넓고 덜 정밀(fp32급 범위). 그래서 fp16 학습엔 손실 스케일링이 필요하고, bf16은 그대로 안정적이다.