제2장. 일반 컴퓨터는 왜 정확한 계산을 못 할까


— 컴퓨터는 숫자를 ‘계산’하지 않고 ‘타협’한다

우리는 흔히 컴퓨터를 이렇게 생각한다.

“컴퓨터는 계산을 잘한다.”
“계산기보다 훨씬 정확하다.”
“사람보다 실수가 없다.”

하지만 이 말은 반만 맞다.

컴퓨터는 빠르지만,
정확함에는 구조적인 한계가 있다.


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. 한 문장 요약

컴퓨터는 무한히 계산하지 않는다.
그래서 계산을 멈추고
결과를 확정한다.

이건 기술의 문제가 아니다.
유한한 세계에서 계산을 수행하는 모든 시스템의 운명이다.


이제 다음 장에서 자연스럽게 이렇게 넘어갈 수 있다.

“그렇다면,
가장 진보된 계산 장치인
양자 컴퓨터는 다를까?”

그리고 독자는 이미 알고 있다.
답은 ‘아니오’라는 걸.

댓글 남기기