Hi
0.1 + 0.2가 0.3이 아닌 이유 ?! 본문
프로그래밍에서 $0.1 + 0.2$을 계산하면 $0.30000000000000004$이 나온다. 그 이유는 무엇일까?
결론부터 말하자면 부동소수점 때문이다!
컴퓨터는 내부적으로 이진법을 사용해서 표현하고 있다.
정수의 경우 이진수로 정확하게 표현할 수 있지만 소수 부분은 조금 다르다.
📌이진법 소수 표현
먼저 $0.625$를 2진수로 바꿔보자.
0.625 = 1/2 + 0/4 + 1/8 → 0.101(2)
정확히 가능하다.
하지만 $0.1$의 경우에는 조금 다르다.
0.1 = 0.0001100110011001100...(2)
0.1에 가까워지기만 할 뿐 정확히 도달하지 못한다.
✅ 오차가 생기는 이유
컴퓨터는 메모리에 유한한 비트만 저장할 수 있다.
따라서 2진수로 무한 소수가 되어버리는 0.1, 0.2와 같은 수는 가까운 근삿값으로 저장된다.
이 상태에서 덧셈을 하면 0.3이 아닌 0.30000000000000004 같은 값이 나오게 된다.
🤔 왜 아직도 이 문제를 해결하지 않을까?
효율성 때문이다!
대부분의 컴퓨터는 IEEE 754 부동소수점 표준을 따른다. 이 방식은 빠르고 효율적인 연산이 가능하다.
또 모든 소수를 정확하게 표현한다면 속도와 메모리 사용량이 크게 늘어나 비효율적일 것이다.
❗정확한 계산이 필요하다면
이 오차를 아예 해결할 수 없는 것은 아니다!
정확한 계산이 필요한 경우에는 decimal과 같은 라이브러리를 이용하면 된다.
'Computer Science' 카테고리의 다른 글
| 브라우저 주소창에 www.google.com을 입력하면? (0) | 2025.08.02 |
|---|---|
| 01. 컴퓨터 구조 이해하기 (0) | 2025.03.04 |