수학

MATH / 초급 47번

자릿수와 오차: 10⁻⁸은 큰 수인가

유효숫자와 반올림에서 시작해 절대오차·상대오차를 가르고, 더할 때와 곱할 때 오차가 어떻게 불어나는지를 봅니다. 자릿수 소거를 손으로 재현하고, 반로그·로그-로그 축을 읽고, 마지막으로 오차의 차수를 적는 기호 O(·)를 세웁니다.

PALDYN Team19 MIN READ

"10−810^{-8} 은 작은 수인가"라는 물음에는 답이 없습니다. 무엇과 견주느냐가 빠졌기 때문입니다. 10−310^{-3} 옆에서는 십만 분의 일이고, 10510^{5} 옆에서는 십조 분의 일입니다.

이 글은 그 견주는 법을 세웁니다. 숫자의 크기를 자릿수로 말하고, 답이 얼마나 맞았는지를 오차로 말하고, 계산을 거치며 그 오차가 어떻게 불어나는지를 봅니다.

과학적 표기와 유효숫자

13번 · 거듭제곱과 근호에서 큰 수와 작은 수를 a×10na \times 10^{n} 꼴로 적는 법을 세웠습니다. 그 표기를 그대로 씁니다.

384400=3.844×105,0.0000042=4.2×10−6384400 = 3.844 \times 10^{5}, \qquad 0.0000042 = 4.2 \times 10^{-6}

앞쪽 aa 에 적힌 자릿수를 유효숫자라고 합니다. 믿을 수 있다고 주장하는 자릿수라는 뜻입니다. 3.844×1053.844 \times 10^{5} 는 유효숫자 4자리이고, 그 아래는 모른다는 말입니다.

보통 표기로는 이것이 흐려집니다. 42004200 은 유효숫자가 둘인지 넷인지 알 수 없지만 4.2×1034.2 \times 10^{3} 과 4.200×1034.200 \times 10^{3} 은 다른 주장입니다.

반올림은 남길 자리 바로 다음 숫자가 5 이상이면 올리고 아니면 버리는 것이라 5.67815.6781 이 3자리에서 5.685.68 이 됩니다. 자르기는 그냥 버리는 것이라 5.675.67 입니다. 뒤에서 자르기를 씁니다.

절대오차와 상대오차

참값을 xx, 손에 든 근삿값을 x~\tilde{x} 라고 하면 오차를 재는 방법이 둘입니다.

절대오차=∣x~−x∣,상대오차=∣x~−x∣∣x∣\text{절대오차} = |\tilde{x} - x|, \qquad \text{상대오차} = \frac{|\tilde{x} - x|}{|x|}

절대오차는 얼마나 벗어났는가로 참값과 같은 단위를 갖고, 상대오차는 참값에 견줘 몇 분의 몇인가로 단위가 없습니다.

같은 400km 오차가 지구–달 거리에서는 0.1%, 서울–부산 거리에서는 100%가 되는 것

지구와 달 사이 384400384400 km 를 384000384000 km 로 적으면 절대오차는 400400 km, 상대오차는 400/384400≈0.00104400 / 384400 \approx 0.00104 로 약 0.10.1 %입니다. 같은 400400 km 를 서울–부산 400400 km 를 잴 때 틀리면 상대오차가 100100 %이고, 이때는 아예 다른 도시에 가 있는 셈입니다. 절대오차가 같아도 뜻이 전혀 다릅니다.

이럴 때 이 오차를 본다
단위가 정해져 있고 허용 범위가 그 단위로 주어졌다 절대오차
참값이 0 근처를 오간다 절대오차 (나눌 수 없습니다)
크기가 아주 다른 것들을 한 줄에 놓고 견준다 상대오차

12번 · 소수·백분율과 비에서 갈라 둔 대로 상대오차는 비율이므로 언제나 퍼센트이고 퍼센트포인트가 아닙니다.

상대오차의 로그가 맞는 자릿수입니다. 22번 · 로그를 여기서 씁니다. 상대오차가 10−k10^{-k} 근처이면 앞에서부터 대략 kk 자리가 맞았다는 뜻입니다.

맞는 자릿수≈−log⁡10(상대오차)\text{맞는 자릿수} \approx -\log_{10}(\text{상대오차})

위의 0.001040.00104 는 −log⁡100.00104≈2.98-\log_{10} 0.00104 \approx 2.98 이라 약 3자리가 맞았습니다. 실제로 3.844×1053.844 \times 10^5 와 3.840×1053.840 \times 10^5 는 앞의 세 자리 33, 88, 44 까지 같습니다.

오차는 계산을 거치며 어떻게 불어나는가

두 수에 각각 오차가 붙어 있을 때 그것을 더하거나 곱하면 어떻게 되는지를 봅니다. 오차끼리 곱한 항은 아주 작으니 버리는데, 이렇게 오차의 1차항까지만 남기는 것을 1차 근사라고 합니다.

더할 때는 절대오차가 더해집니다. 참값이 xx, yy 이고 근삿값이 x+δxx + \delta_x, y+δyy + \delta_y 이면

(x+δx)+(y+δy)=(x+y)+(δx+δy)(x + \delta_x) + (y + \delta_y) = (x + y) + (\delta_x + \delta_y)

곱할 때는 상대오차가 더해집니다. 상대오차를 ε\varepsilon 으로 적어 근삿값을 x(1+εx)x(1 + \varepsilon_x), y(1+εy)y(1 + \varepsilon_y) 라고 하면

x(1+εx)⋅y(1+εy)=xy (1+εx+εy+εxεy)≈xy (1+εx+εy)x(1+\varepsilon_x) \cdot y(1+\varepsilon_y) = xy\,(1 + \varepsilon_x + \varepsilon_y + \varepsilon_x \varepsilon_y) \approx xy\,(1 + \varepsilon_x + \varepsilon_y)

εxεy\varepsilon_x \varepsilon_y 는 작은 수끼리의 곱이라 버렸습니다.

자릿수 소거 — 가장 아픈 자리

빼기는 위 두 규칙 어느 쪽으로도 안심할 수 없습니다. 크기가 비슷한 두 수를 빼면 절대오차는 그대로인데 값이 작아져 상대오차가 폭발합니다. 이것을 자릿수 소거라고 합니다.

앞 네 자리가 같은 두 수를 빼면 맞는 자리가 통째로 사라지는 그림

1.2345×1031.2345 \times 10^{3} 과 1.2344×1031.2344 \times 10^{3} 은 각각 유효숫자 5자리인데, 빼면 0.0001×1030.0001 \times 10^{3} 로 유효숫자가 1자리만 남습니다.

손으로 재현하기 — √(x+1) − √x

x=108x = 10^{8} 에서 x+1−x\sqrt{x+1} - \sqrt{x} 를 구합니다. 유효숫자 다섯 자리까지만 손에 쥐고 있다고 하겠습니다.

108=104=1.0000×104\sqrt{10^{8}} = 10^{4} = 1.0000 \times 10^{4}

108+1=10000.00005… ⟶ 1.0000×104\sqrt{10^{8} + 1} = 10000.00005\ldots \ \longrightarrow \ 1.0000 \times 10^{4}

두 근호값이 다섯 자리 안에서는 똑같습니다. 그대로 빼면

1.0000×104−1.0000×104=01.0000 \times 10^{4} - 1.0000 \times 10^{4} = 0

답이 0입니다. 맞는 자리가 하나도 안 남았습니다.

이제 식을 먼저 고쳐 봅니다. 분자를 유리화합니다 — 분자에 x+1+x\sqrt{x+1} + \sqrt{x} 를 곱하고 나누면

x+1−x=(x+1−x)(x+1+x)x+1+x=1x+1+x\sqrt{x+1} - \sqrt{x} = \frac{(\sqrt{x+1} - \sqrt{x})(\sqrt{x+1} + \sqrt{x})}{\sqrt{x+1} + \sqrt{x}} = \frac{1}{\sqrt{x+1} + \sqrt{x}}

이 꼴에는 뺄셈이 없습니다. 같은 다섯 자리로 계산합니다.

11.0000×104+1.0000×104=12.0000×104=5.0000×10−5\frac{1}{1.0000 \times 10^{4} + 1.0000 \times 10^{4}} = \frac{1}{2.0000 \times 10^{4}} = 5.0000 \times 10^{-5}

참값이 5.0000×10−55.0000 \times 10^{-5} 이므로 다섯 자리가 전부 맞았습니다. 같은 정확도의 재료로 같은 값을 구하는데, 식을 어떻게 적었느냐가 다섯 자리와 0자리를 갈랐습니다.

자리가 유한하면 생기는 일

12번에서 1/3=0.333…1/3 = 0.333\ldots 이 끝나지 않는 순환소수라고 했습니다. 종이든 기계든 자리는 유한하므로 어디선가 잘라야 합니다. 소수 다섯째 자리에서 자르면 0.333330.33333 이고

절대오차=13−0.33333=0.00000333…≈3.33×10−6\text{절대오차} = \frac{1}{3} - 0.33333 = 0.00000333\ldots \approx 3.33 \times 10^{-6}

상대오차=3.33×10−60.33333≈1.0×10−5\text{상대오차} = \frac{3.33 \times 10^{-6}}{0.33333} \approx 1.0 \times 10^{-5}

이 값을 3배 하면 0.999990.99999 로 11 이 아니고, 절대오차도 3배가 되어 10−510^{-5} 입니다. 자른 자리는 나중 계산을 그대로 따라다닙니다. 기계가 수를 어떤 규격으로 담는지는 중급 70·71번의 몫이고, 여기서는 "자리가 유한하면 자른다, 자른 만큼이 오차다"까지입니다.

로그 축 — 몇 배씩 자라는 것을 직선으로 펴기

값이 몇 배씩 벌어지는 자료를 그대로 그리면 작은 값들이 바닥에 눌려 아무것도 안 보입니다. 40번 · 기술통계가 넘겨 둔 축 이야기입니다.

반로그 축에서 지수 성장이, 로그-로그 축에서 거듭제곱 관계가 직선이 되는 것

반로그 축은 세로만 로그로 매깁니다. 21번 · 지수함수의 y=a⋅bxy = a \cdot b^{x} 에 로그를 취하면

log⁡10y=log⁡10a+xlog⁡10b\log_{10} y = \log_{10} a + x \log_{10} b

오른쪽이 xx 의 일차식이므로 지수적으로 자라는 것이 직선이 되고 기울기가 log⁡10b\log_{10} b 입니다. y=2xy = 2^{x} 는 한 칸 갈 때마다 log⁡102≈0.301\log_{10} 2 \approx 0.301 씩 올라갑니다.

로그-로그 축은 가로세로를 다 로그로 매깁니다. y=axky = a x^{k} 에 로그를 취하면

log⁡10y=log⁡10a+klog⁡10x\log_{10} y = \log_{10} a + k \log_{10} x

거듭제곱 관계가 직선이 되고 기울기가 지수 kk 입니다 — 기울기를 재면 그것이 곧 몇 제곱인지입니다.

배수를 평균 낼 때는 기하평균입니다. 40번에서 이름을 받아 둔 것을 여기서 씁니다. 첫해에 2배, 둘째 해에 8배가 되었다면 평균은 (2+8)/2=5(2+8)/2 = 5 배가 아니라 2×8=4\sqrt{2 \times 8} = 4 배입니다. 실제로 4×4=16=2×84 \times 4 = 16 = 2 \times 8 로 맞습니다. 로그 축에서 잰 눈금의 한가운데가 기하평균입니다.

오차의 차수와 기호 O(·)

35번 · 테일러 첫걸음에서 다항식으로 함수를 흉내 내고 남는 것을 절단오차라고 했습니다. ehe^{h} 를 1차까지 자른 1+h1 + h 로 흉내 내고, hh 를 반씩 줄이며 그 오차를 적습니다.

hh ehe^{h} 1+h1 + h 오차 앞 줄과의 비
0.10.1 1.10517091.1051709 1.11.1 5.171×10−35.171 \times 10^{-3} —
0.050.05 1.05127111.0512711 1.051.05 1.271×10−31.271 \times 10^{-3} 4.074.07
0.0250.025 1.02531511.0253151 1.0251.025 3.151×10−43.151 \times 10^{-4} 4.034.03

hh 를 반으로 줄일 때마다 오차가 넷으로 나뉩니다. 반의 제곱이 4분의 1이므로, 오차는 h2h^{2} 에 비례해 줄고 있습니다.

h를 반으로 줄일 때 오차가 반이면 O(h), 넷으로 나뉘면 O(h²)

이것을 적는 약속이 점근 표기 O(⋅)O(\cdot) 입니다.

오차가 O(h2)O(h^{2}) 라는 것은, 어떤 상수 CC 가 있어 hh 가 충분히 작을 때 오차가 Ch2C h^{2} 를 넘지 않는다는 뜻입니다.

위 표는 O(h2)O(h^{2}) 입니다. 반으로 줄일 때 오차도 반이 되었다면 O(h)O(h) 라고 적습니다.

상수와 낮은 차수 항은 버립니다. 오차가 정확히 3h2+5h33h^{2} + 5h^{3} 이어도 O(h2)O(h^{2}) 라고 적습니다 — hh 가 작아질수록 h3h^{3} 은 h2h^{2} 앞에서 무시할 만큼 작아지고, 상수 3은 "몇 배 빨라지는가"를 바꾸지 않기 때문입니다. 버리는 것이 정당한 조건은 "hh 가 충분히 작을 때" 하나입니다.

OO 는 위로 막는 표기이고, 아래로 막는 것은 Ω\Omega, 위아래로 함께 막는 것은 Θ\Theta 라고 적는다는 것만 이름으로 적어 둡니다.

연습 문제

연습 1 — 크기와 오차 재기

  1. 10−810^{-8}, 10−310^{-3}, 10510^{5} 셋에 대하여 10−310^{-3} 은 10−810^{-8} 의 몇 배인지, 10510^{5} 는 10−310^{-3} 의 몇 배인지, 10510^{5} 는 10−810^{-8} 의 몇 배인지 각각 답하세요.
    지수를 빼면 됩니다. 10−3/10−8=10510^{-3} / 10^{-8} = 10^{5} 로 십만 배, 105/10−3=10810^{5} / 10^{-3} = 10^{8} 로 1억 배, 105/10−8=101310^{5} / 10^{-8} = 10^{13} 로 10조 배입니다.
  2. 0.00070280.0007028 을 과학적 표기로 적고 유효숫자가 몇 자리인지 답하세요. 또 유효숫자 2자리로 반올림한 값도 적으세요.
    7.028×10−47.028 \times 10^{-4} 이고 유효숫자는 4자리입니다. 2자리로 반올림하면 셋째 자리가 2라 버려 7.0×10−47.0 \times 10^{-4} 입니다.
  3. 참값이 2.50002.5000 인데 2.49752.4975 를 얻었습니다. 절대오차와 상대오차를 구하고, 앞에서부터 몇 자리가 맞았는지 답하세요.
    절대오차는 ∣2.4975−2.5000∣=0.0025|2.4975 - 2.5000| = 0.0025 이고 상대오차는 0.0025/2.5=0.001=10−30.0025 / 2.5 = 0.001 = 10^{-3} 입니다. −log⁡1010−3=3-\log_{10} 10^{-3} = 3 이므로 약 3자리가 맞았습니다 — 실제로 2.502.50 까지 같습니다.

연습 2 — 오차가 불어나는 법

  1. 절대오차가 각각 0.020.02 와 0.050.05 인 두 값을 더했습니다. 합의 절대오차는 최대 얼마인지 답하세요.
    절대오차가 더해지므로 0.02+0.05=0.070.02 + 0.05 = 0.07 입니다. 두 오차의 부호가 같을 때가 가장 나쁜 경우입니다.
  2. 상대오차가 각각 22 %와 33 %인 두 값을 곱했습니다. 곱의 상대오차를 1차 근사로 구하고, 버린 항이 얼마인지도 적으세요.
    곱에서는 상대오차가 더해지므로 약 55 %입니다. 버린 항은 0.02×0.03=0.00060.02 \times 0.03 = 0.0006 으로 0.060.06 %이고, 남긴 55 %에 견주면 100분의 1 남짓입니다.
  3. 6.7182×1026.7182 \times 10^{2} 과 6.7179×1026.7179 \times 10^{2} 은 각각 유효숫자 5자리입니다. 차를 구하고 그 결과의 유효숫자가 몇 자리인지 답하세요.
    6.7182×102−6.7179×102=0.0003×102=3×10−26.7182 \times 10^{2} - 6.7179 \times 10^{2} = 0.0003 \times 10^{2} = 3 \times 10^{-2} 입니다. 앞의 네 자리가 같아 지워졌으므로 유효숫자는 1자리만 남습니다.

연습 3 — 로그 축과 차수

  1. 등비수열 1, 3, 9, 27, 811,\ 3,\ 9,\ 27,\ 81 의 각 항에 log⁡10\log_{10} 을 취해 값을 적고, 이웃한 값의 차가 일정한지 확인한 뒤 반로그 축에서 어떤 모양이 되는지 답하세요. (log⁡103≈0.477\log_{10} 3 \approx 0.477)
    0, 0.477, 0.954, 1.431, 1.9080,\ 0.477,\ 0.954,\ 1.431,\ 1.908 입니다. 이웃한 값의 차가 모두 0.4770.477 로 일정하므로 반로그 축에서는 기울기 0.4770.477 인 직선이 됩니다.
  2. 어떤 값이 첫해에 3배, 둘째 해에 12배가 되었습니다. 해마다 평균 몇 배가 된 셈인지 답하세요.
    배수의 평균은 기하평균이므로 3×12=36=6\sqrt{3 \times 12} = \sqrt{36} = 6 배입니다. 6×6=36=3×126 \times 6 = 36 = 3 \times 12 로 맞습니다.
  3. 어떤 근사법의 오차를 재었더니 h=0.4h = 0.4 에서 8.0×10−38.0 \times 10^{-3}, h=0.2h = 0.2 에서 4.1×10−34.1 \times 10^{-3}, h=0.1h = 0.1 에서 2.0×10−32.0 \times 10^{-3} 이었습니다. 오차의 차수를 O(⋅)O(\cdot) 로 적으세요.
    앞 줄과의 비가 8.0/4.1≈1.958.0/4.1 \approx 1.95, 4.1/2.0≈2.054.1/2.0 \approx 2.05 로 hh 를 반으로 줄일 때 오차도 반이 됩니다. 따라서 O(h)O(h) 입니다.

정리

  • 유효숫자는 믿을 수 있다고 주장하는 자릿수이고, 과학적 표기로 적어야 흐려지지 않습니다.
  • 절대오차는 단위가 있고 상대오차는 없습니다. 크기가 다른 것들을 견줄 때는 상대오차입니다.
  • 상대오차의 로그가 맞는 자릿수입니다 — 상대오차 10−k10^{-k} 는 대략 kk 자리가 맞았다는 뜻입니다.
  • 1차 근사로 더할 때는 절대오차가, 곱할 때는 상대오차가 더해집니다.
  • 크기가 비슷한 두 수를 빼면 자릿수가 통째로 날아갑니다. x+1−x\sqrt{x+1} - \sqrt{x} 는 유리화해 뺄셈을 없애면 다섯 자리가 그대로 남았습니다.
  • 반로그 축은 지수 성장을, 로그-로그 축은 거듭제곱 관계를 직선으로 폅니다. 뒤쪽의 기울기가 곧 지수이고, 배수의 평균은 기하평균입니다.
  • O(h2)O(h^{2}) 는 hh 를 반으로 줄일 때 오차가 넷으로 나뉜다는 뜻입니다. 상수와 낮은 차수 항은 hh 가 충분히 작다는 조건 아래 버립니다.

다음 글은 초급 트랙의 마지막입니다. 지금까지 손으로 푼 것들을 기계에게 채점시키는 방법을 다룹니다.


읽어주셔서 감사합니다. 😊

LATEST

수학의 최신 글

수학2026.09.07

양자화 오차: 격자 사상, 오차 분산, 이상치 채널

실수를 2^b개 격자에 사상할 때 오차의 분산이 왜 Δ²/12인지 유도하고, 그것이 비트당 6.02dB라는 SNR로 번역되는 과정을 실측과 대조했습니다. 이상치 하나가 나머지 값의 유효 비트를 어떻게 먹는지, 그리고 int4에서 성능이 무너지는 지점을 오차 예산으로 미리 계산하는 법까지.

중급18 MIN
수학2026.09.07

수치적으로 안정한 계산 패턴 모음

최댓값 빼기, 로그 공간, log1p·expm1, 분산의 두 공식, 정규화의 ε, fp32 누산, 역행렬 대신 solve — 프레임워크가 몰래 해 주는 일곱 가지를 하나씩 꺼내 각각 어떤 고장을 막는지 직접 재 봤습니다. 수식을 그대로 옮긴 코드가 왜 라이브러리보다 나쁜지에 대한 목록입니다.

중급22 MIN
수학2026.09.07

부동소수점은 어디서 새는가: 반올림, 상쇄, 더하는 순서

0.1 + 0.2가 0.3이 아닌 이유부터 시작해 머신 엡실론을 유도하고, 같은 16비트인데 fp16과 bf16이 서로 다른 지점에서 터지는 이유, 비슷한 수를 뺄 때 유효자리가 사라지는 파괴적 상쇄, 그리고 1,000만 개를 순서만 바꿔 더했을 때 오차가 백만 배 갈리는 실험까지 직접 재 봤습니다.

중급23 MIN