부동소수점 계산기
10진수를 IEEE 754 이진 표현으로 변환하고 정밀도를 분석합니다.
임의의 10진수를 입력하고 정밀도 형식을 선택하면 IEEE 754 이진 표현, 지수, 가수, 반올림 오차를 확인할 수 있습니다.
부동소수점 계산기
10진수를 IEEE 754 이진 표현으로 변환하고 정밀도를 분석합니다.
예시
아래 버튼을 클릭하면 잘 알려진 수치 상수를 불러올 수 있습니다.
| 10진 입력 | 정밀도 및 설명 | 의미 |
|---|---|---|
| 3.141592653589793(배정도) | 부호: 0 · 지수: 1 · 정확한 자릿수: 약 15 | π — 무리수이며 아주 작은 반올림 오차와 함께 저장됨 |
| 0.1(단정도) | 부호: 0 · 저장값: 0.100000001490116 · 오차: 약 1.49e-9 | 대표적인 반올림 오차 예시 |
| 2.718281828459045(배정도) | 부호: 0 · 지수: 1 · 정확한 자릿수: 약 15 | 오일러 수 e |
| 1.23e-10(단정도) | 부호: 0 · 정규화됨 · 작은 양수 | 단정도에서 작은 수의 정밀도를 테스트 |
부동소수점 계산기 소개
부동소수점 계산기는 10진수를 IEEE 754 이진 부동소수점 표현으로 변환하고, 부호 비트, 지수, 가수를 포함한 전체 비트 수준 분해를 보여줍니다. 부동소수점 표현을 이해하는 것은 컴퓨터 과학자, 소프트웨어 엔지니어, 수치해석가, 그리고 계산 정밀도가 중요한 환경에서 컴퓨터를 다루는 모든 사람에게 기본이 되는 지식입니다.
IEEE 754 표준은 1985년 IEEE가 제정하고 2008년에 개정했으며, C, C++, Java, Python, JavaScript를 포함한 거의 모든 현대 프로세서와 프로그래밍 언어에서 사용하는 부동소수점 연산 형식을 정의합니다. 이 표준은 단정도(32비트)와 배정도(64비트)라는 두 가지 주요 형식을 규정합니다.
32비트 단정도 부동소수점은 부호 비트 1개, 지수 비트 8개, 가수(유효숫자) 비트 23개로 구성됩니다. 부호 비트는 0이면 양수, 1이면 음수입니다. 지수는 바이어스 127을 더해 저장되므로 실제 지수는 저장값에서 127을 뺀 값이며, 이를 통해 부호 없는 정수만으로 양수와 음수 지수를 모두 표현할 수 있습니다. 가수에는 정규화된 유효숫자의 소수 부분이 저장되며, 맨 앞의 1은 암묵적인 '숨은 비트'로 처리되어 실질적인 정밀도가 1비트 더 늘어납니다.
64비트 배정도 부동소수점은 부호 비트 1개, 지수 비트 11개(바이어스 1023), 가수 비트 52개를 사용하며, 단정도의 6~7자리와 비교해 약 15~17자리의 유효 10진수를 제공합니다. 배정도는 대부분의 프로그래밍 언어에서 기본 부동소수점 형식입니다.
중요한 사실은 0.1처럼 보기에는 단순한 10진수도 이진 부동소수점에서는 정확히 표현할 수 없다는 점입니다. 10진수 0.1의 이진수는 0.0001100110011...처럼 무한히 반복되는 분수이며, float는 고정된 비트 수만 가지므로 23비트나 52비트 가수에 맞추기 위해 잘라내야 합니다. 이 잘림은 아주 작은 반올림 오차를 만들며, 많은 프로그래밍 언어에서 0.1 + 0.2가 정확히 0.3이 되지 않는 이유이기도 합니다. 이 계산기는 입력한 어떤 10진수든 실제 저장값과 반올림 오차를 보여 주므로, 수치 계산을 다루는 사람에게 매우 유용한 디버깅 및 학습 도구가 됩니다.
이 계산기 사용법
- 정밀도 형식을 선택하세요. 단정도(32비트)는 임베디드나 GPU에 적합하고, 배정도(64비트)는 과학 계산에 적합합니다.
- 입력란에 임의의 10진수를 입력하세요. 과학적 표기법(예: 1.23e-10 또는 6.022e23)도 지원합니다.
- 변환을 클릭하면 부호 비트, 지수 비트(바이어스 값과 실제 값 포함), 가수 비트로 이루어진 IEEE 754의 전체 분해를 볼 수 있습니다.
- 저장된 값—컴퓨터가 실제로 사용하는 정확한 10진수—을 확인하고 입력값과 비교하여 반올림 오차를 살펴보세요.
- 예시 버튼을 사용해 π, e, 0.1 같은 잘 알려진 상수가 이진 부동소수점에서 어떻게 표현되는지 확인할 수 있습니다.
자주 묻는 질문
왜 0.1은 부동소수점에서 정확히 표현할 수 없나요?
10진수 0.1은 이진수에서 1/3처럼 무한히 반복되는 분수(0.000110011001100...)입니다. float는 고정된 비트 수만 가지므로 이 분수를 잘라 저장해야 하고, 그 과정에서 아주 작은 반올림 오차가 생깁니다. 그래서 많은 언어에서 0.1 + 0.2는 정확한 0.3이 아니라 약 0.30000000000000004가 됩니다.
지수 필드의 바이어스는 무엇인가요?
바이어스는 실제 지수에 더해 저장하는 고정 오프셋입니다. 단정도는 127, 배정도는 1023을 사용합니다. 실제 지수가 3이면 단정도에서 저장값은 3 + 127 = 130이 됩니다. 이 바이어스 표현 덕분에 부호 없는 정수만으로 −126~+127(단정도) 또는 −1022~+1023(배정도)의 지수를 표현할 수 있습니다.
숨은 비트란 무엇인가요?
정규화된 부동소수점 수에서는 가수의 맨 앞 비트가 항상 1이지만 저장되지는 않습니다. 이것이 암묵적인 '숨은' 또는 '암시된' 비트입니다. 이 덕분에 단정도는 24비트의 가수 정밀도(저장 23비트 + 숨은 1비트), 배정도는 53비트(저장 52비트 + 숨은 1비트)를 가집니다. 0에 가까운 비정규화 수는 암묵적인 앞 비트가 0입니다.
IEEE 754의 특수 값은 무엇인가요?
IEEE 754는 여러 특수 값을 정의합니다. 양의 0과 음의 0(부호 비트로 구분), 양의 무한대와 음의 무한대(모든 지수 비트가 1이고 모든 가수 비트가 0), 그리고 NaN(Not a Number, 모든 지수 비트가 1이고 가수 비트가 하나 이상 1)입니다. 이 값들은 프로그램이 중단되지 않도록 오버플로, 0으로 나누기, 정의되지 않은 연산을 우아하게 처리하게 해 줍니다.
단정도와 배정도는 언제 사용해야 하나요?
과학 계산, 금융 계산, 그리고 7자리 이상의 10진 정밀도가 필요한 모든 경우에는 배정도(64비트)를 사용하세요. 메모리나 성능이 제약이면 단정도(32비트)를 사용하면 됩니다. GPU는 단정도 float를 훨씬 빠르게 처리하고, 모바일/임베디드 시스템도 효율 때문에 32비트를 선호하는 경우가 많습니다. 단정도의 반올림 오차는 반복 알고리즘에서 상당히 누적될 수 있습니다.
코드에서 부동소수점 정밀도 오류를 어떻게 피하나요?
동등성 비교에는 정확한 같음 대신 허용 오차(epsilon)를 사용하세요. a === b 대신 |a − b| < 1e-9처럼 비교합니다. 금융 계산에서는 정수 연산(예: 금액을 센트 단위로 저장)이나 전용 소수점 라이브러리를 고려하세요. 과학 계산에서는 Kahan 합산 같은 보정 합산 알고리즘을 사용해 큰 합에서 누적되는 반올림 오차를 줄일 수 있습니다.