— 컴퓨터는 숫자를 ‘계산’하지 않고 ‘타협’한다
우리는 흔히 컴퓨터를 이렇게 생각한다.
“컴퓨터는 계산을 잘한다.”
“계산기보다 훨씬 정확하다.”
“사람보다 실수가 없다.”
하지만 이 말은 반만 맞다.
컴퓨터는 빠르지만,
정확함에는 구조적인 한계가 있다.
1. 컴퓨터는 10진수로 계산하지 않는다
사람은 숫자를 이렇게 쓴다.
- 1
- 3.15
- 0.999…
이건 모두 10진수다.
하지만 컴퓨터는 10진수를 이해하지 못한다.
컴퓨터가 이해하는 건 오직 이것뿐이다.
- 0
- 1
즉, 2진수다.
2. 문제의 시작: 대부분의 소수는 2진수로 끝나지 않는다
여기서 문제가 생긴다.
10진수에서 끝나는 소수들이 있다.
- 0.5
- 0.25
- 0.75
이건 2진수로도 깔끔하게 끝난다.
하지만 대부분의 소수는 그렇지 않다.
예를 들어,
3.15
이 숫자를 2진수로 바꾸면 이렇게 된다.
3.15 = 11.0010011001100110011… (무한 반복)
즉,
3.15는
컴퓨터 세계에서는
끝나지 않는 숫자다.
3. 컴퓨터는 무한히 저장할 수 없다
컴퓨터의 메모리는 유한하다.
- 8비트
- 16비트
- 32비트
- 64비트
아무리 커도 유한하다.
그래서 컴퓨터는 이렇게 행동한다.
“끝나지 않네?
그럼 여기까지만 저장하자.”
예를 들어 16비트 환경이라면,
3.15 ≈ 3.14990234375
이미 원래 숫자와 다른 값이 되었다.
이건 버그가 아니다.
의도된 설계다.
4. 컴퓨터는 ‘정확한 숫자’를 저장하지 않는다
중요한 사실 하나.
컴퓨터 안에는
우리가 생각하는 ‘정확한 3.15’가 존재하지 않는다.
존재하는 건 이것뿐이다.
- “3.15에 가장 가까운 값”
- “지금 메모리에서 허용되는 근사값”
즉,
컴퓨터는 숫자를 저장하는 게 아니라
타협한 값을 저장한다.
5. 그래서 계산 결과가 이상해진다
이제 이런 계산을 해보자.
10 % 3.15
사람이 계산하면,
- 3.15 × 3 = 9.45
- 10 − 9.45 = 0.55
하지만 컴퓨터는 이렇게 계산한다.
- 3.14990234375 × 3
- 10 − 9.44970703125
- 결과 ≈ 0.55029296875
즉,
컴퓨터는
정확히 0.55를 내놓지 못한다.
6. 이건 실수가 아니라 ‘결단’이다
여기서 중요한 관점 전환이 필요하다.
컴퓨터는 실수한 게 아니다.
컴퓨터는 결정을 내린 것이다.
- 무한히 계산할 수 없기 때문에
- 어느 지점에서 계산을 멈추고
- 결과를 확정한다
이걸 우리는 이렇게 부른다.
- 반올림
- 오차
- 근사값
하지만 본질은 이것이다.
계산 종료 선언
7. 컴퓨터에게 0.999…는 아직 끝난 숫자가 아니다
이제 다시 이 질문으로 돌아가 보자.
0.999… = 1 인가?
컴퓨터의 관점에서는 이렇게 말할 수 있다.
- 0.999…는 끝나지 않은 계산
- 끝나지 않은 계산은 저장할 수 없음
- 그래서 어느 순간,“이쯤이면 1이다”
라고 판단한다
이 판단 기준이 바로
오차 허용 범위,
즉 ε(엡실론) 이다.
8. 한 문장 요약
컴퓨터는 무한히 계산하지 않는다.
그래서 계산을 멈추고
결과를 확정한다.
이건 기술의 문제가 아니다.
유한한 세계에서 계산을 수행하는 모든 시스템의 운명이다.
이제 다음 장에서 자연스럽게 이렇게 넘어갈 수 있다.
“그렇다면,
가장 진보된 계산 장치인
양자 컴퓨터는 다를까?”
그리고 독자는 이미 알고 있다.
답은 ‘아니오’라는 걸.