본문 바로가기
Artificial Intelligence/60. Python

[PYTHON] 정수(int)와 실수(float)의 내부 메커니즘과 정밀도의 함정

by Papa Martino V 2026. 2. 2.
728x90

정수(int)와 실수(float)
정수(int)와 실수(float)

 

파이썬(Python)은 데이터 타입을 자동으로 관리해주는 동적 타이핑 언어이지만, 프로그래밍의 기초가 되는 정수(int)실수(float)의 차이를 명확히 이해하지 못하면 금융 연산이나 대규모 데이터 분석에서 치명적인 오류를 범할 수 있습니다. 단순히 '소수점이 있느냐 없느냐'의 차이를 넘어, 파이썬 내부에서 이들이 어떻게 처리되는지 전문적인 시각에서 파헤쳐 보겠습니다.


1. 파이썬 정수(int)의 독특함: 무한 정밀도(Arbitrary Precision)

C나 Java 같은 언어는 정수형 데이터에 4바이트(int) 또는 8바이트(long)라는 고정된 메모리 크기를 할당합니다. 이 때문에 표현할 수 있는 숫자의 범위에 한계가 있고, 범위를 넘어서면 '오버플로우(Overflow)'가 발생합니다. 하지만 파이썬의 int는 '객체'입니다. 파이썬 3부터는 모든 정수가 Arbitrary Precision 방식으로 처리되어, 가용 메모리가 허용하는 한 숫자의 크기에 제한이 없습니다. 이는 수백 자리, 수천 자리의 숫자를 다루는 암호학이나 천문학적 계산에서 파이썬이 강력한 힘을 발휘하는 이유입니다.

2. 파이썬 실수(float)의 한계: IEEE 754 표준과 부동 소수점

반면, 파이썬의 실수형인 float은 C 언어의 double(64비트) 형과 대응됩니다. 이는 국제 표준인 IEEE 754 부동 소수점 방식을 따릅니다. 실수는 유한한 64비트 메모리 안에 숫자를 구겨 넣어야 하므로, 필연적으로 '근사치'를 저장하게 됩니다.

우리가 십진법으로 표현하는 0.1은 이진법으로 변환하면 무한 소수가 됩니다. 컴퓨터는 이를 특정 지점에서 잘라서 저장하기 때문에, 미세한 정밀도 손실(Precision Loss)이 발생합니다. 이것이 바로 0.1 + 0.2가 정확히 0.3이 되지 않는 근본 원인입니다.


3. 정수(int) vs 실수(float) 핵심 비교 요약

구분 정수 (int) 실수 (float)
표현 형식 소수점이 없는 정수값 소수점을 포함한 유리수
메모리 크기 가변적 (숫자 크기에 따라 증가) 고정적 (일반적으로 24바이트 객체 내 8바이트 데이터)
정확성 100% 정확함 (무한 정밀도) 근사치 표현 (정밀도 한계 존재)
연산 속도 큰 숫자의 경우 상대적으로 느림 하드웨어(FPU) 가속으로 상대적으로 빠름
주요 용도 인덱싱, 반복 횟수 제어, 카운팅 측정값, 물리 엔진, 확률 통계

4. 개발자가 반드시 알아야 할 실무 포인트 (Sample Example)

예제 1: 부동 소수점 오차 확인하기

실수 연산에서 흔히 발생하는 논리적 오류를 방지하기 위해 다음 코드를 이해해야 합니다.


# 부동 소수점 오차 사례
a = 0.1 + 0.2
print(f"0.1 + 0.2 = {a}") 
# 출력: 0.30000000000000004

# 올바른 비교 방법 (math.isclose 사용)
import math
print(math.isclose(a, 0.3)) 
# 출력: True

예제 2: 타입 변환 시 데이터 유실

실수를 정수로 변환할 때는 반올림이 아니라 '버림'이 기본적으로 적용됩니다.


val = 3.99
converted_int = int(val)
print(converted_int) 
# 출력: 3 (0.99가 사라짐)

5. 결론: 언제 무엇을 써야 하는가?

금융권처럼 소수점 이하의 정확도가 생명인 프로그램을 개발한다면 파이썬의 기본 float 대신 decimal 모듈의 Decimal 클래스를 사용해야 합니다. 반면, 일반적인 공학 계산이나 머신러닝 모델의 가중치를 계산할 때는 계산 속도가 빠른 float이 유리합니다. 파이썬 개발자로서 데이터 타입의 물리적 한계를 인지하는 것은 코드의 안정성을 결정짓는 중요한 역량입니다. 숫자를 단순히 기입하는 것을 넘어, 메모리 속에 그려지는 비트의 세계를 이해하시길 바랍니다.


참고 문헌 (Sources)

  • Python Software Foundation. "Built-in Types - int, float". docs.python.org.
  • IEEE Computer Society. "IEEE Standard for Floating-Point Arithmetic (IEEE 754)".
  • Luciano Ramalho. "Fluent Python: Clear, Concise, and Effective Programming". O'Reilly Media.
728x90