부호 1bit + 지수 8bit + 가수 저장 공간 23bit = 32bit
가수의 맨 앞에는 보통 항상 1이 오므로 저장하지 않고 생략합니다. 이 숨은 1bit까지 포함하면 실제 유효숫자 정밀도는 24bit입니다.
먼저 이진수를 맨 앞이 1이 되도록 정규화합니다. 0.1은 다음처럼 소수점을 오른쪽으로 네 칸 옮겨 표현합니다.
-4입니다.-4 + 127 = 123123₁₀ = 01111011₂따라서 0.1의 지수 필드는 01111011입니다. 값을 다시 읽을 때는 저장값 123에서 Bias 127을 빼서 실제 지수 -4를 복원합니다.
정규화된 수의 맨 앞 1은 항상 있다고 약속하고 저장하지 않습니다. 이를 숨은 1이라고 합니다.
100110011001100110011001100…이 계속 남아 있으므로 정확히 잘라 버리면 원래 값보다 작아집니다.그래서 0.1보다 아주 조금 큰 0.10000000149011612가 저장됩니다. 23bit를 단순히 버리는 것이 아니라 남은 비트를 보고 가장 가까운 값으로 반올림한다는 점이 핵심입니다.
1단계: 10진수 0.1을 이진수로 바꾸면 0.00011001100110011…₂처럼 0011이 끝없이 반복됩니다.
2단계: Float32의 저장 공간은 한정되어 있으므로 반복되는 비트를 끝까지 담을 수 없습니다.
3단계: 23bit까지만 저장하고 가장 가까운 값으로 반올림합니다.
a === b로 직접 비교하지 않고 |a-b| < epsilon처럼 허용 오차 범위로 비교합니다.0.1과 0.2 모두 이진수로 정확히 끝나지 않아 각각 근삿값으로 저장됩니다. 그 근삿값을 더한 결과에도 작은 오차가 남습니다. 이는 계산 오류가 아니라 한정된 비트로 무한한 실수를 표현하는 방식의 한계입니다.