컴퓨터는 0.1을 정확히 모른다 — 이진법의 순환소수
프로그래밍 언어나 스프레드시트에서 0.1 + 0.2 를 계산하면 0.3 이 아니라 0.30000000000000004 같은 값이 나오는 일이 있다. 컴퓨터가 덧셈을 못 해서가 아니다. 컴퓨터는 애초에 0.1 이라는 수를 정확히 담고 있지 않다.
이유는 순환소수 판별법 그대로다. 십진법에서는 10 = 2 × 5 이므로 기약분수의 분모가 2와 5만으로 되어 있을 때 유한소수가 된다. 컴퓨터는 이진법을 쓰고 2의 소인수는 2뿐이다. 그래서 이진법에서는 분모가 2의 거듭제곱일 때만 딱 떨어진다. 0.5 = 2분의 1, 0.25 = 4분의 1 은 문제없지만 0.1 = 10분의 1 은 분모에 5가 있어 끝나지 않는다. 실제로 0.1 을 이진법으로 쓰면 0.0001100110011… 로 0011 이 끝없이 되풀이되는 순환소수다.
컴퓨터는 이 무한소수를 정해진 자릿수에서 잘라 저장하므로 아주 작은 오차가 남고, 여러 번 더하면 그 오차가 겉으로 드러난다. 그래서 돈을 다루는 프로그램은 금액을 소수로 두지 않고 원 단위 정수로 계산하거나, 십진 소수를 그대로 다루는 전용 자료형을 쓴다. 뒤집어 보면 이런 이야기도 된다. 십진법에서 골칫거리인 3분의 1 은 삼진법으로 쓰면 0.1 로 딱 떨어진다. 어떤 수가 순환하느냐는 그 수만의 성질이 아니라, 분모의 소인수가 밑의 소인수 안에 들어 있느냐의 문제다.