Integer & Float Representations
컴퓨터가 정수와 실수를 이진 비트로 추상화하는 방식과, 보수(Complement) 체계 및 IEEE 754 표준이 갖는 물리적 오차와 제약을 다루는 학습 노드입니다.
Article
M
Me
hyunyoun's Blog
computer-architecture-embedded-systemscomputer-architectureembedded-systemsdigital-logicprocessor-physicsintegerfloat-representationslearning9 min read
1. Overview
정수와 실수의 표현(Integer & Float Representations, IFR)은 인간이 사용하는 무한하고 연속적인 숫자 체계를 유한한 비트(Bit) 덩어리 안으로 구겨 넣기 위해, 컴퓨터 과학자들이 만들어낸 '데이터 압축과 잘림(Truncation)의 물리적 규칙'입니다.
학습자는 음수를 표현하기 위해 숫자 링(Ring)을 꺾어버리는 **2의 보수(Two's Complement)**의 대수적 기하학을 뜯어보고, 엄청나게 크거나 미세한 소수점을 32비트 안에 부호-지수-가수로 우겨넣어 근사(Approximation)해 버리는 IEEE 754 부동소수점(Floating-Point) 체계를 해부합니다. 이를 통해 단순히 변수에 값을 넣는 코더(Coder)를 넘어, 오버플로우(Overflow)와 정밀도 상실(Precision Loss)로 인해 우주선이 폭발하거나 금융 시스템이 붕괴하는 참사를 막아내는 데이터 물리 통제 능력을 확보합니다.
2. Scope & Boundaries
In-Scope
- 정수 역학 (Integer Mechanics): 부호 없는 정수(Unsigned), 2의 보수(Two's Complement), 엔디안(Endianness: Big vs Little).
- 정수 연산 물리 (Integer Arithmetic): 덧셈, 뺄셈, 논리적/산술적 시프트(Shift), 부호 확장(Sign Extension), 오버플로우(Overflow).
- 부동소수점 규격 (Floating-Point Physics): IEEE 754 표준 (단정밀도 32-bit, 배정밀도 64-bit), 부호(Sign), 지수(Exponent, Bias), 가수(Mantissa/Fraction).
- 실수 연산 결함 (Float Anomalies): 정규화(Normalization), 비정규 수(Denormalized Numbers), 무한대(Infinity), NaN(Not a Number), 반올림 오차(Rounding Error).
Out-of-Scope
- 덧셈기 하드웨어 회로도: 전가산기(Full Adder)나 캐리 예측 가산기(CLA)의 AND/OR/XOR 게이트 트랜지스터 배치 02-01-01. Digital Logic & Boolean Algebra 영역.
- 고급 다정밀도 연산: Python의 잎사귀(Arbitrary-precision) 정수 구현이나 빅인티저(BigInteger) 소프트웨어 라이브러리 내부 구조 05-01. PL Fundamentals 영역.
Boundaries
- IFR vs. Math Logic (01-01): 수학(01-01)에서는 수직선이 양끝으로 무한히 뻗어나가고 유리수가 촘촘히 꽉 차(Dense) 있지만, IFR의 세계는 32비트라는 좁은 방 안에 42억 개의 숫자만 점점이 흩뿌려져 있고 범위를 벗어나면 반대쪽 끝으로 워프(Warp)해버리는 지독히 닫힌(Closed) 물리 공간입니다.
3. Counterexample
- 2의 보수 오버플로우 붕괴 (Overflow Fallacy): 게임에서 플레이어의 골드를 32비트 부호 있는 정수(Signed Int)로 저장했는데, 유저가 돈을 너무 많이 모아
2,147,483,647을 넘기는 순간 0이 아니라 최악의 음수-2,147,483,648로 숫자가 워프해버려 계정이 빚더미에 앉는 파국. 정수가 원형 버퍼(Circular Ring) 위에서 톱니바퀴처럼 돈다는 물리적 직관을 모르면 런타임 크래시를 예측할 수 없습니다. - 부동소수점 금융 테러 (Floating Point Precision Loss): 0.1 달러씩 10번을 더하면 1.0 달러가 나와야 한다고 착각하여, 결제 시스템을
double타입으로 냅다 짜버리는 미친 짓. 0.1은 이진법 분수로 영원히 떨어지지 않는 무한 소수이므로(0.000110011...), IEEE 754 메모리에 들어갈 때 뒤쪽 꼬리가 뭉텅 잘려나가며 덧셈을 할 때마다 오차가 눈덩이처럼 불어나 금융 정산액이 박살 납니다. (돈은 무조건 Integer로 다뤄야 합니다.)
4. Prerequisites
- 이진법 대수학 (Basic): 10진수를 2진수, 16진수(Hex)로 자유롭게 변환하고, 2의 거듭제곱에 대한 직관()이 있어야 비트 패킹을 이해할 수 있습니다. (01-01-01 DLB)
5. Learning Map
6. Learning Topics
Basic
Core Topic 01: 엔디안과 비트-바이트 정렬 (Endianness & Packing)
- Why to Learn: 네트워크로 32비트 정수(4바이트)를 쏘거나 파일(Hex)을 까볼 때, 내 컴퓨터와 쟤 컴퓨터가 바이트를 읽는 방향이 달라서 숫자가 우주 괴물로 변하는 참사를 막기 위함입니다.
- What to Learn:
- Concepts: 바이트(Byte), 워드(Word), 최상위 바이트(MSB), 최하위 바이트(LSB).
- Skills: 리틀 엔디안(Little-Endian), 빅 엔디안(Big-Endian), 비트 시프트 연산(
<<,>>). - Tools: Hex Editor, 네트워크 바이트 오더.
- Trade-offs: 사람이 종이에 숫자를 쓰는 순서대로 직관적인 빅 엔디안(네트워크 표준) vs 하위 바이트부터 덧셈 캐리(Carry)를 올리기 편해 CPU 하드웨어 구조를 극도로 단순화시킨 리틀 엔디안(Intel x86)의 기계적 실용성.
- How to Learn:
- 1단계: 16진수 정수
0x12345678이 메모리 번지 0x00번지부터 0x03번지에 저장될 때, 리틀 엔디안에서는 거꾸로78 56 34 12로 박히는 하드웨어 주소 물리(Address Physics)를 해부합니다. - 2단계: C 언어 소켓 프로그래밍에서
htonl(Host to Network Long) 함수를 안 썼다가 인텔 PC(리틀)가 쏜 포트 번호가 서버(빅)에서 괴랄한 번호로 뒤집히는 엔디안 미스매치 에러를 뜯어봅니다.
- 1단계: 16진수 정수
- Implement: 32비트 정수를 입력받아, 이를 바이트 단위(4칸 배열)로 리틀 엔디안 형식과 빅 엔디안 형식의 헥스 스트링(
[0x78, 0x56, 0x34, 0x12])으로 변환하여 콘솔에 덤프(Dump)하는 비트 패킹/언패킹 유틸리티 작성.
Recommended
Core Topic 02: 2의 보수와 오버플로우 물리 (Two's Complement)
- Why to Learn: CPU 안에는 비싼 뺄셈기를 달지 않고 오직 덧셈기(Adder) 하나만 놔두기 위해, 수학의 '뺄셈'이라는 행위 자체를 덧셈으로 해킹(Hack)하는 아키텍처를 장악하기 위함입니다.
- What to Learn:
- Concepts: 부호 비트(Sign Bit), 1의 보수, 2의 보수(Two's Complement).
- Skills: 2의 보수 생성 법칙(비트 반전 후 +1), 부호 확장(Sign Extension), 산술 오버플로우 판별.
- Tools: 비트와이즈 연산(
~,&,|). - Trade-offs: 단순 부호 비트만 붙이는 방식을 쓰면 과 이라는 끔찍한 쓰레기 데이터가 2개 생기는 버그 vs 2의 보수를 쓰면 0은 오직 1개로 유일해지지만 음수의 최솟값()이 양수의 최댓값()보다 1개 더 커지는 비대칭의 묘한 부작용.
- How to Learn:
- 1단계: 비트 반전 후 1을 더하는 짓이 사실 "어떤 수 에 더했을 때 0(자리 올림수로 날아감)이 되게 만드는 마법의 수()"를 기계적으로 찾아내는 수학 모듈로(Modulo) 연산임을 해부합니다.
- 2단계: 8비트 상에서 을 하면 이 되는 게 아니라, 부호 비트가 1로 바뀌어 최악의 음수 로 추락하는 오버플로우(Overflow) 상태 기계를 뜯어봅니다.
- Implement: 8비트 정수 범위(
-128 ~ 127) 내의 두 숫자 a, b를 받아, 이를 2의 보수 이진 문자열로 변환하여 덧셈(단순 비트 덧셈)을 수행한 뒤, 양수+양수=음수가 되는 오버플로우를 비트 마스킹으로 감지하여 에러 플래그를 올리는 소프트웨어 ALU.
Practical
Core Topic 03: IEEE 754 부동소수점 규격 (Floating-Point Physics)
- Why to Learn: 처럼 무한히 작은 소수점부터 은하의 크기까지 다루는 과학적 실수를 32개의 스위치(비트) 안에 가장 오차율이 적게 구겨 넣는 극한의 압축 공학을 이해하기 위함입니다.
- What to Learn:
- Concepts: IEEE 754, 단정밀도(Float, 32b) / 배정밀도(Double, 64b).
- Skills: 부호(1b), 지수 편향(Exponent Bias, 8b), 가수 정규화(Mantissa, 23b), 소수점 이동.
- Tools: 부동소수점 비트 시뮬레이터.
- Trade-offs: 정수처럼 숫자가 균등하게 퍼져 있는 게 아니라, 0 근처에서는 미친 듯이 촘촘하게 모여 있고 숫자가 커질수록 점과 점 사이의 간격(Resolution)이 수백만 단위로 벌어지는 부동소수점만의 기하학적 왜곡.
- How to Learn:
- 1단계: 실수를 2진수로 변환할 때 무조건 맨 앞자리를 로 맞추는 정규화(Normalization)를 통해, 맨 앞의 '1'은 당연한 거니까 아예 저장하지 않고 생략해 버리는(Hidden Bit) 1비트 극한 압축의 마법을 뜯어봅니다.
- 2단계: 지수부(Exponent)에 음수를 저장하기 위해 2의 보수를 쓰지 않고, 무식하게 127(Bias)을 더해버려서 지수끼리 크기 비교(Sorting)를 단순 정수 비교처럼 초고속으로 쳐내는 하드웨어 꼼수를 해부합니다.
- Implement: 임의의 파이썬 실수(예:
-118.625)를 인자로 받아, 부호 비트(1), 지수 비트(8), 가수 비트(23)의 32비트 IEEE 754 0/1 스트링으로 분해해서 시각화하여 콘솔에 이진법 포맷으로 프린트하는 파서(Parser).
Advanced
Core Topic 04: 부동소수점 정밀도 붕괴와 특수 값 (Float Disasters & NaN)
- Why to Learn: 우주선 발사 궤도 계산이나 3D 렌더링 물리 엔진이 갑자기 블랙홀처럼 좌표가 'NaN'으로 변하며 폭발하는 정밀도(Precision) 상실 현상의 근원을 차단하기 위함입니다.
- What to Learn:
- Concepts: 무한대(), NaN(Not a Number), 비정규 수(Denormalized / Subnormal Numbers).
- Skills: 반올림 오차(Rounding Error), 큰 수에 작은 수 더하기 흡수(Absorption) 문제, 엡실론(Machine Epsilon).
- Tools: 부동소수점 비교 연산.
- Trade-offs: 극도로 0에 가까워졌을 때(Underflow) 에러를 내고 뻗어버릴 바엔, 정규화(Hidden 1) 룰을 깨고 점진적으로 해상도를 깎아 먹으면서 0에 기어가는 비정규 수(Subnormal)를 허용하는 유연한 설계 타협.
- How to Learn:
- 1단계: 지수부 비트가 모두 1(11111111)일 때 가수가 0이면 무한대(, 오버플로우 폭발), 가수가 0이 아니면 NaN( 같은 연산 불능)으로 처리되는 IEEE 754의 하드웨어 예외 처리 플래그 물리를 해부합니다.
- 2단계: 연산을 할 때, 소수점을 맞추기 위해 1억 쪽으로 지수를 시프트(Shift) 시키다 보면 작은 수의 유효 비트(가수)가 오른쪽으로 밀려나 메모리 밖으로 튕겨 나가 소멸(흡수 현상)하는 정보 증발 과정을 뜯어봅니다.
- Implement: 실수 A와 B를 비교할 때
A == B라고 절대 코딩하지 않고,abs(A - B) < Epsilon(머신 엡실론) 공식을 강제하여 반올림 오차(Rounding Error)가 발생해도 안전하게 동일성을 판단하는 방어적 실수 비교 헬퍼 함수 작성.
7. Terminology
8. References
Primary
- [P1] CS2023 - AR/Data Representation — Main standard for Bit maps.
- [P3] CyBOK v1.1 - Hardware Security Foundation — Integer overflow risks.
Secondary
- [What Every Computer Scientist Should Know About Floating-Point Arithmetic] David Goldberg — The definitive paper.
- [Computer Systems: A Programmer's Perspective] Bryant & O'Hallaron — Data representation for devs.
Industry
- [IEEE 754-2019 Standard for Floating-Point Arithmetic] — Official industry specification.
- [ISO/IEC 9899 (C Standard) - Numerical limits] — Language level constraints.
9. Final Checklist
Primary
- 32비트 Integer 최대값()에서 1을 더했을 때 발생하는 부호 비트 전이의 물리적 결과를 수식으로 설명할 수 있는 가? (P1)
- 0.5, 0.25와 같이 2의 거듭제곱 역수들로 구성된 실수는 왜 부동소수점 오차 없이 완벽히 표현되는지 입증 가능한가? (P1)
Secondary
- 단정도(32비트)와 배정도(64비트)를 선택할 때, 가수부 비트 차이가 실제 유효 숫자 정밀도에 미치는 수리적 영향을 소통 가능한가?
- 부동소수점 연산에서 결합 법칙(Associative Law)이 성립하지 않는 물리적 사례()를 증명할 수 있는가?
Industry
- 네트워크 통신 프로토콜 설계 시, 이기종 CPU 간 데이터 전송을 위해 'Network Byte Order'로 변환해야 하는 필연성을 제안할 수 있는 가? (SFIA)
- 금융 시스템에서 통화 연산을 수행할 때 부동소수점 대신 고정소수점(Fixed-point)이나 정수(Cents 단위)를 써야 하는 물리적 보안 근거를 기술할 수 있는 가?