입력한 십진수를 IEEE 754 부동소수점 비트 필드로 분해합니다. 단정밀도(32비트)와 배정밀도(64비트)를 지원하며, 0.1이 정확하지 않은 이유를 비트 수준에서 확인할 수 있습니다.
입력
수
인코딩할 수입니다. 정수, 소수, Infinity, -Infinity 등의 특수 값을 입력할 수 있습니다.
결과
값을 입력하면 계산 결과가 표시됩니다.
비트 구조
양수와 양의 0이면 0, 음수와 음의 0이면 1입니다.
원시 지수 비트열, 저장된 정수, 그리고 괄호 안에 실제(바이어스 제거) 지수가 표시됩니다. 바이어스 값은 단정밀도에서 127, 배정밀도에서 1023입니다.
명시적으로 저장되는 유효 자릿수의 소수 부분입니다. 정규수의 경우 선행 비트 1은 묵시적으로 존재하며 저장되지 않습니다.
전체 비트 패턴을 대문자 16진수로 나타낸 값입니다. 단정밀도는 8자리, 배정밀도는 16자리입니다.
저장된 값
비트 패턴에 실제로 인코딩된 십진수 값입니다. 단정밀도는 유효 숫자 9자리, 배정밀도는 17자리로 표시됩니다. 입력값과의 차이가 반올림 오차를 나타냅니다.
IEEE 754 부동소수점 비트
컴퓨터가 저장하는 실수는 거의 모두 부동소수점 수입니다. 프로세서는 모든 실수를 목록으로 가지고 있는 것이 아니라, 부호, 지수, 소수 부분을 조합하여 원하는 값을 근사합니다. IEEE 754는 1985년에 제정되고 2008년에 개정된 표준으로, 이 방식을 정확하게 정의합니다. 현재 사용되는 주요 프로그래밍 언어와 프로세서는 모두 이 표준을 따릅니다.
비트 구조
IEEE 754 단정밀도(32비트) 수는 하나의 32비트 워드 안에 세 필드로 구분됩니다.
여기서 는 부호 비트, 은 이진수로 해석되는 저장된 가수 소수 부분이며, 바이어스는 단정밀도에서 127, 배정밀도에서 1023입니다. 의 선행 비트 1은 묵시적으로 존재하며 실제로 저장되지 않습니다. 이를 통해 유효 자릿수를 1비트 추가로 확보합니다.
0.1이 정확하지 않은 이유
익숙한 십진 소수 대부분은 이진수로 표현하면 순환합니다. 0.1은 10진수로는 유한하지만 2진수로 전개하면 순환 소수가 됩니다.
0.110=0.0001100110011…2
가수 필드의 너비가 유한하므로(단정밀도 23비트, 배정밀도 52비트) 이 순환 소수는 가장 가까운 표현 가능한 값으로 반올림됩니다. 배정밀도에서 저장된 값은 약 0.10000000000000000555로, 정확한 0.1과 다릅니다. 이처럼 반올림된 값 두 개를 더하면 오차가 누적됩니다.
0.1+0.2=0.30000000000000004
이것은 버그가 아니라 이진 표현의 예측 가능한 결과입니다. 변환기의 저장된 값 항목에서 임의의 수를 입력하면 비트 패턴에 해당하는 정확한 십진값과 반올림 오차를 직접 확인할 수 있습니다.
특수 값
IEEE 754는 두 가지 지수 패턴을 특수 경우에 예약합니다.
지수 비트
가수
의미
모두 0
모두 0
±0
모두 0
0 이외
비정규수(매우 작은 값)
모두 1 (255 또는 2047)
모두 0
±무한대
모두 1 (255 또는 2047)
0 이외
NaN (Not a Number)
비정규수(subnormal)는 묵시적 선행 비트 1을 포기하여 정규수의 최솟값보다 더 작은 값을 표현하지만, 그만큼 정밀도가 감소합니다. 오버플로나 0으로 나누기가 발생하면 ±무한대가 생성됩니다. 이나 같은 미정의 연산은 NaN을 반환합니다.
단정밀도와 배정밀도 비교
단정밀도는 32비트를 사용하며 유효 자릿수 약 7자리를 제공합니다. 표현 범위는 대략 에서 입니다. 배정밀도는 64비트를 사용하며 유효 자릿수 15~17자리, 범위는 에서 까지 확장됩니다.
범용 프로그래밍 언어 대부분은 부동소수점의 기본 형식으로 배정밀도를 사용합니다. 단정밀도는 그래픽 파이프라인, 신경망 가중치, 메모리 대역폭이 산술 정밀도보다 중요한 임베디드 펌웨어에서 주로 활용됩니다.
16진수 출력 읽기
16진수 필드는 수의 모든 비트를 간결하게 표현합니다. 16진수 한 자리가 4비트를 나타내므로, 단정밀도 값은 8자리, 배정밀도 값은 16자리의 16진수로 표현됩니다. 엔지니어들은 16진수 표현을 통해 비트 수준에서 부동소수점 값을 비교하고, 무한대나 NaN 같은 특수 패턴을 식별하며, 플랫폼 간 정확한 비트 패턴 보존 여부를 검증합니다.
예를 들어, 원주율 π를 단정밀도로 저장하면 0x40490FDB이고, 배정밀도로 저장하면 0x400921FB54442D18입니다. 16진수에서 지수와 가수를 직접 확인할 수 있으며, 배정밀도가 훨씬 많은 가수 자릿수를 담고 있음을 볼 수 있습니다. 이진수와 16진수 산술을 더 자세히 살펴보려면 진법 변환기를 참고하십시오.
자주 묻는 질문 (FAQ)
0.1이 정확하게 저장되지 않는 이유는 무엇입니까?
IEEE 754는 수를 이진수로 저장합니다. 십진 소수 0.1은 10진수의 1/3처럼 2진수로 표현하면 순환 소수가 됩니다. 저장된 비트 패턴은 가장 가까운 표현 가능한 값, 즉 배정밀도에서는 약 0.10000000000000000555로 반올림됩니다. 이처럼 반올림된 두 값을 더하면 오차가 누적되어 0.1 + 0.2 = 0.30000000000000004와 같이 정확한 0.3이 나오지 않습니다. 저장된 값 항목에서 임의의 수에 대한 반올림 오차를 직접 확인할 수 있습니다.
단정밀도와 배정밀도는 어떻게 구분하여 사용합니까?
배정밀도(64비트)는 유효 자릿수 약 15~17자리를 제공하며, 대부분의 프로그래밍 언어에서 부동소수점의 기본 형식으로 사용됩니다. 단정밀도(32비트)는 유효 자릿수 약 7자리로 정밀도가 낮지만 메모리를 절반만 사용합니다. 32비트 부동소수점 연산 장치가 내장된 하드웨어에서는 연산 속도도 더 빠릅니다. 그래픽 처리, 기계 학습 프레임워크, 산술 정밀도보다 메모리 대역폭이 중요한 임베디드 시스템 등에서 단정밀도가 주로 활용됩니다.