핵심 인사이트 (3줄 요약)
> 1. **본질**: 부동소수점 (Floating Point)은 아주 큰 수와 아주 작은 수를 같은 형식으로 다루기 위해 가수와 지수를 분리한 근사 표현이다.
> 2. **가치**: IEEE 754 (Institute of Electrical and Electronics Engineers 754)는 표현 범위, 반올림, 특수값을 표준화해 서로 다른 시스템 간 호환성을 높였다.
> 3. **판단 포인트**: 실수처럼 보인다고 정확한 실수가 아니므로, 금액·비교·누적 계산에서는 오차 한계를 전제로 설계해야 한다.
---
## Ⅰ. 개요 및 필요성
고정 소수점이나 정수는 작은 값에는 강하지만, 범위가 넓어지면 자릿수가 부족하다. 부동소수점 (Floating Point)은 숫자를 `(-1)^sign × 1.fraction × 2^(exponent-bias)` 형태로 저장해, 범위와 정밀도를 절충한다.
그래서 과학 계산, 그래픽, 기계학습처럼 값의 크기 변화가 큰 영역에서 필수적이다. 반대로 돈 계산처럼 정확한 소수점이 중요한 경우에는 오차가 누적되므로, 부동소수점만 믿고 설계하면 안 된다.
- **📢 섹션 요약 비유**: 큰 운동장과 작은 칠판을 하나의 자로 재려면, 자를 늘였다 줄였다 해야 하는 것과 같다.
---
## Ⅱ. 아키텍처 및 핵심 원리
IEEE 754의 기본 구조는 sign, exponent, fraction이다. exponent는 bias를 더해 저장하고, fraction은 정규화된 경우 숨은 1을 포함해 실제 유효숫자를 표현한다.
| 형식 | 부호 | 지수 | 가수 | 특징 |
|---|---|---|---|---|
| single precision | 1 | 8 | 23 | 빠르고 메모리 절약 |
| double precision | 1 | 11 | 52 | 더 넓은 범위와 정밀도 |
32-bit single precision
[ sign ][ exponent ][ fraction ]
1bit 8bit 23bit
값 = (-1)^sign × 1.fraction × 2^(exponent-127)
지수가 모두 0이면 subnormal 또는 0, 모두 1이면 Infinity와 NaN (Not a Number)을 나타낸다. 이 특수값 덕분에 오류 상태를 수치 공간 안에 표현할 수 있다.
- **📢 섹션 요약 비유**: 숫자를 부호·지수·가수로 나눠 적는 것은 주소와 방 번호를 함께 적는 것처럼 생각하면 된다.
---
## Ⅲ. 비교 및 연결
부동소수점은 정수나 고정 소수점보다 범위가 넓지만, 정밀도가 균일하지 않다. 값이 커질수록 인접한 수 사이 간격이 벌어지므로, `0.1 + 0.2 == 0.3` 같은 비교가 실패할 수 있다.
| 형식 | 장점 | 한계 |
|---|---|---|
| 정수 | 정확함 | 범위와 소수 표현이 제한적 |
| 고정 소수점 | 금액 계산에 적합 | 스케일을 미리 정해야 함 |
| 부동소수점 | 넓은 범위와 범용성 | 반올림 오차와 비교 문제 |
싱글과 더블을 비교하면, 더블은 메모리와 연산 비용이 늘지만 누적 오차에 더 강하다. 따라서 정확도 요구가 높은 시뮬레이션은 더블을, 대규모 텐서 연산은 비용과 정확도의 균형을 함께 본다.
- **📢 섹션 요약 비유**: 정수는 칼같이 맞는 자, 부동소수점은 넓은 범위를 보는 망원경에 가깝다.
---
## Ⅳ. 실무 적용 및 기술사 판단
실무에서는 오차 허용 범위를 먼저 정하고, 비교는 절대 오차와 상대 오차를 함께 사용해야 한다. 또한 합산 순서가 결과를 바꾸므로, 큰 값과 작은 값을 섞어 더할 때는 보정 합산을 고려한다.
체크리스트
- 금액과 수량을 부동소수점으로 저장하지 않는가?
- 비교 시 epsilon을 기준으로 판단하는가?
- 누적 연산의 순서와 반올림 정책을 정의했는가?
- 필요한 정밀도에 맞는 형식(single/double)을 선택했는가?
안티패턴
-
실수 비교를
==로만 처리하는 것 -
돈을 0.1 단위 float로 계산하는 것
-
NaN과 Infinity를 예외가 아닌 정상값처럼 넘기는 것
- 📢 섹션 요약 비유: 돈 계산은 동전 개수로 세어야지, 모래알처럼 대충 재면 안 된다.
Ⅴ. 기대효과 및 결론
부동소수점은 "완벽한 실수"가 아니라 "계산 가능한 근사 실수"다. 이 사실을 이해하면 정밀도 예산을 설계할 수 있고, 오차를 버그가 아니라 모델의 일부로 다룰 수 있다.
따라서 부동소수점은 편리한 기본형이면서도, 오차 분석과 비교 정책이 함께 있어야 안전하다. 정확성이 최우선인 영역에서는 표현 방식부터 다시 고르는 것이 맞다.
- **📢 섹션 요약 비유**: 큰 그림은 멀리서 보되, 아주 정확한 조립은 다른 도구를 써야 한다.
---
### 📌 관련 개념 맵
| 개념 | 연결 포인트 |
| :-- | :-- | | IEEE 754 (Institute of Electrical and Electronics Engineers 754) | 부동소수점 표준 | | sign / exponent / fraction | 비트 필드 구조 | | bias | 지수 저장 보정값 | | NaN (Not a Number) | 계산 오류를 나타내는 특수값 | | ULP (Unit in the Last Place) | 인접 표현값 간 거리 |
### 📈 관련 키워드 및 발전 흐름도
실수 범위 요구
│
▼
부호 / 지수 / 가수 설계 │ ▼ 반올림과 특수값 처리 │ ▼ 오차 예산과 비교 정책
### 👶 어린이를 위한 3줄 비유 설명
1. 숫자를 적을 때 자릿수가 아주 많아도, 컴퓨터는 꼭 필요한 만큼만 적어요.
2. 그래서 어떤 숫자는 조금 덜 정확하지만 더 넓은 범위를 볼 수 있어요.
3. 돈처럼 딱 맞아야 하는 일은 다른 방법을 써야 해요.