근사·반올림·오차 전파
0.1을 열 번 더했는데 화면에 정확히 1이 나오지 않거나, 매우 큰 수에 작은 수를 더했는데 값이 그대로인 일이 있다. 컴퓨터는 유한한 비트로 수를 표현하고 계산도 유한한 단계에서 끝내므로 많은 실수를 근사한다. 근사는 잘못이 아니라 계산을 가능하게 하는 선택이다. 다만 오차의 종류와 크기, 반복 과정에서 퍼지는 …
컴퓨터의 숫자는 정확한 현실이 아니라 제한된 표현이다
0.1을 열 번 더했는데 화면에 정확히 1이 나오지 않거나, 매우 큰 수에 작은 수를 더했는데 값이 그대로인 일이 있다. 컴퓨터는 유한한 비트로 수를 표현하고 계산도 유한한 단계에서 끝내므로 많은 실수를 근사한다. 근사는 잘못이 아니라 계산을 가능하게 하는 선택이다. 다만 오차의 종류와 크기, 반복 과정에서 퍼지는 방향을 모르면 작은 차이가 최종 판단을 뒤집을 수 있다.
먼저 되짚기: 부동소수점
부동소수점은 부호·유효숫자·지수로 매우 넓은 범위의 실수를 유한한 비트에 근사해 표현한다. 표현 가능한 값 사이 간격은 수의 크기에 따라 달라지고, 많은 십진 소수는 정확히 저장되지 않는다. 수치오차는 이 유한 정밀도와 근사 계산에서 생긴 차이를 다룬다.
수치오차
수치오차는 참값 또는 더 정확한 기준값과 계산에 사용하거나 얻은 근사값 사이의 차이다. 참값 x와 근사값 x̂(엑스햇으로 읽는 근사값 표기)의 절댓값 차이 |x-x̂|는 절대오차이고, 참값이 0이 아닐 때 이를 |x|로 나눈 값은 상대오차다. 절대오차는 실제 단위의 차이를, 상대오차는 값의 크기와 비교한 차이를 보여 준다.
표현오차는 실제 수를 유한한 비트 값으로 바꿀 때 생긴다. 반올림오차는 계산 결과를 표현 가능한 가까운 값으로 바꿀 때, 절단오차는 무한히 이어지거나 매우 많은 단계를 가진 계산을 유한한 단계에서 멈출 때 생긴다. 입력을 측정하는 과정의 불확실성과 프로그램의 논리 결함은 수치오차와 원인이 다르므로 따로 구분하되 최종 결과에서는 함께 영향을 평가해야 한다. 오차 전파는 한 단계의 입력 오차가 뒤 계산의 출력 오차로 이어지는 과정이다.
반올림 방식을 고정하고 정상적인 표현범위 안에서 한 번의 실수 반올림이 만드는 상대오차의 대표 상한을 단위 반올림오차 u라 한다. 이는 입력·모델·절단오차를 모두 뜻하는 값이 아니라 유한정밀도 반올림의 규모를 분석하기 위한 척도다.
입력·표현·연산·출력으로 오차가 전파된다
상자 안의 대상과 화살표의 조건을 함께 읽으세요. 좁은 화면에서는 같은 관계를 세로로 재배치한 도식을 보여 줍니다.
binary64 예와 구분한 유효숫자 6자리 십진 최근접 모형이다. 정확한 1.234567−1.234566=0.000001이 두 저장값 1.23457−1.23457=0이 되어 절대오차 0.000001·상대오차 100%다. 표현·측정·반올림·절단·민감도·누적을 구분하고 업무 절대·상대 허용오차와 비교한다.
일반 계산에서는 입력값 → 저장값 → 중간값 → 출력값을 따라 본다. 입력의 측정 불확실성과 저장 표현오차, 연산의 반올림·절단오차를 구분하며 민감도·상쇄·누적으로 전파되는 크기를 분석한다. 최종 값은 업무의 절대·상대 허용오차로 판정한다.
사례: 금액 누적과 거의 같은 수의 뺄셈
금액 0.1을 이진 부동소수점으로 반복 합산하면 저장된 근삿값의 작은 차이가 누적될 수 있다. 금액처럼 정확한 십진 단위가 필요한 계산은 최소 화폐단위 정수나 적합한 십진연산을 사용한다.
거의 같은 큰 수를 빼면 앞자리 유효숫자가 사라져 원래 근사오차가 상대적으로 커질 수 있다. 수식을 같은 의미의 안정된 형태로 바꾸거나 더 높은 정밀도와 오차추정을 사용한다.
IEEE754 binary64의 최근접 반올림을 쓰는 대표 계산에서는 0.1+0.1+0.1이 0.30000000000000004, 0.1을 10번 순서대로 더한 값이 0.9999999999999999가 될 수 있다. 정확한 십진 기준 1과의 절대오차는 약 1.11×10⁻¹⁶이다. 0.01 단위로 정산하는 예라면 0.1을 정수 10으로 저장해 10번 합한 100단위로 처리하며, “가까우니 같은 금액”이라는 허용오차 판정으로 청구 규칙을 대신하지 않는다.
반면 센서 기준 20℃에 근사 20.003℃이고 허용 절대오차 0.01℃라면 오차 0.003℃로 계산 기준을 통과한다. 센서 자체 불확실성 ±0.2℃가 있다면 그것까지 0.003℃로 줄었다고 해석하지 않는다. 정확한 금액 단위 규칙과 근사 측정의 오차예산은 서로 다른 계약이다.
작은 오차가 계산을 지나며 달라지는 세 방식
첫째, 반복 누적이다. 저장된 0.1이 실제 0.1과 아주 조금 다르면 여러 번 더할 때 그 차이도 누적된다. 금액처럼 정확한 소수 단위가 필요하면 정수로 센 최소 화폐단위를 사용하거나 정확한 십진 연산을 선택한다.
둘째, 큰 값과 작은 값의 혼합이다. 표현 간격보다 작은 값을 매우 큰 수에 더하면 결과가 같은 큰 수로 반올림될 수 있다. 합계를 구할 때 작은 값부터 더하거나 보정 합산 알고리즘을 쓰면 잃는 정보를 줄일 수 있다.
셋째, 거의 같은 두 수의 뺄셈이다. 앞자리 대부분이 지워지고 원래 근사오차만 남아 상대오차가 커지는 현상을 치명적 상쇄라 한다. 수식을 같은 의미지만 뺄셈을 피하는 형태로 바꾸거나 더 높은 정밀도를 사용한다. 각 단계에서 입력 범위와 민감도를 보고 오차 상한이 최종 허용오차 안에 드는지 확인한다.
같은 binary64 모형에서 (10^16+1)−10^16은 첫 덧셈이 10^16으로 반올림되어 0이 될 수 있지만, 정확한 실수 산식의 기준값은 1이다. 연산 순서를 바꾼 10^16+(1−10^16)도 반드시 고쳐진다고 보장할 수 없으므로 정밀도·실제 순서를 함께 검사한다.
상쇄의 작은 모형은 유효숫자 6자리 십진 최근접 반올림으로 구분해서 계산한다. 정확한 1.234567과 1.234566의 차이는 0.000001인데 둘 다 1.23457로 저장되면 뺄셈 결과 0, 절대오차 0.000001, 상대오차 100%다. binary64의 실제 출력이라고 혼동하지 않는다.
동치 수식의 예로 x>0에서 √(x+1)−√x = 1/(√(x+1)+√x)다. x가 클 때 왼쪽의 가까운 두 값 차이를 오른쪽으로 계산하면 상쇄를 줄일 수 있다. 두 식의 정의역과 분모 조건은 그대로 확인한다.
반복계산의 완성 예: √2를 구간으로 좁힌다
√2는 f(x)=x²−2의 양수 근이다. 앞의 연속함수 학습에 따라 f가 연속인 [1,2]에서 f(1)=−1, f(2)=2로 부호가 다르므로 그 사이에 근이 있다. 양 끝을 a·b, 중점을 m=(a+b)/2라 쓰고 f(m)을 계산한다. f(m)이 0이면 그 점이 근이고, 아니면 양 끝 부호가 다른 절반 구간을 남긴다. 이처럼 근을 포함한 구간을 반으로 줄이는 반복이 여기의 이분법이다.
| 이분 횟수 | 검사할 중점 m | f(m) | 남길 구간 | 구간폭 | 그 구간 중점의 오차상한 |
|---|---|---|---|---|---|
| 0 | — | 양 끝 −1·2 | [1,2] | 1 | 0.5 |
| 1 | 1.5 | 0.25 | [1,1.5] | 0.5 | 0.25 |
| 2 | 1.25 | −0.4375 | [1.25,1.5] | 0.25 | 0.125 |
| 3 | 1.375 | −0.109375 | [1.375,1.5] | 0.125 | 0.0625 |
최종 근사값은 항상 현재 남은 구간의 중점이다. 근이 구간 안에 있으므로 그 값의 절대오차는 구간폭/2 이하다. 초기폭 1을 n번 이분한 뒤 폭은 2⁻ⁿ=1/2ⁿ이고 중점오차 상한은 2⁻⁽ⁿ⁺¹⁾이다. 목표 10⁻⁶=0.000001을 정하면 18회 상한 2⁻¹⁹≈0.000001907은 아직 크고, 19회 상한 2⁻²⁰≈0.000000954는 목표 이하다. 따라서 구간폭/2≤10⁻⁶일 때 성공으로 종료한다.
이는 부호가 다른 연속함수의 근 포함 구간을 계속 유지한 계산의 상한이다. 실제 유한정밀도에서는 함숫값의 부호와 구간 갱신이 믿을 수 있는지 확인하고, 비정상값·구간 유지 실패·정밀도 한계로 더 줄일 수 없음 또는 최대 25회 안에 목표 미충족이면 실패로 보고한다. 연속성이나 부호변화가 없는 다른 식에 이 종료판정을 그대로 적용하지 않는다.
오차의 원인과 척도를 섞지 않는다
| 구분 | 생기는 지점 | 예 | 줄이는 방법 |
|---|---|---|---|
| 표현·반올림오차 | 값을 유한 정밀도에 저장·연산 | 0.1의 이진 근사 | 적합한 자료형·정밀도·연산 순서 |
| 절단오차 | 반복·급수·미분을 유한 단계에서 종료 | 반복해를 너무 일찍 멈춤 | 한 값에 가까워지는 수렴 기준·단계크기·오차 추정 |
| 입력 불확실성 | 측정·수집·변환 | 센서 정밀도와 보정 오차 | 교정·반복측정·불확실성 기록 |
| 논리 결함 | 잘못된 공식·단위·경계 처리 | 초를 밀리초로 오해 | 검토·단위검사·기준 사례 시험 |
절대오차 1은 값이 10일 때는 크지만 10억일 때는 작을 수 있다. 상대오차는 규모 비교에 유리하지만 참값이 0이거나 매우 작으면 정의할 수 없거나 지나치게 커진다. 그래서 업무 허용범위에 맞춰 절대허용오차와 상대허용오차를 함께 쓴다.
실수를 같다로 직접 비교하면 경계에서 흔들린다
근사값에 a == b만 사용하면 계산 순서가 다른 두 값이 아주 작은 차이로 불일치할 수 있다. 반대로 허용오차를 지나치게 크게 두면 실제로 다른 값까지 같다고 본다. 값의 단위와 크기, 의사결정 경계를 기준으로 |a-b|와 상대 차이를 함께 비교한다.
표현 범위를 넘으면 오버플로로 매우 큰 값이나 오류가 되고, 0에 가까운 작은 값은 언더플로로 정밀도를 잃거나 0이 될 수 있다. 반복 계산이 수렴하는지 확인하지 않거나 중간값의 오차를 기록하지 않으면 최종 숫자만 정밀해 보인다. 입력 범위, 반복횟수, 정밀도, 종료 기준, 오차 추정과 예외 처리를 시험 결과에 남긴다.
자체 10점 문제
수치오차의 종류와 오차 전파를 설명하고 정보시스템 수치계산의 안정성 확보방안을 제시하시오.
요구어는 설명과 제시다. 표현·반올림·절단·입력 불확실성을 구분하고 누적·상쇄·범위·허용오차 통제를 연결한다.
10점 풀이 방향과 모범답안 보기
10점 답안 목차
- 절대·상대오차
- 표현·반올림·절단오차
- 입력불확실성·논리결함 구분
- 누적·상쇄·오차전파
- 안정성·허용오차·예외검사
10점 답안 도식
입력에서 표현·연산·출력까지 반올림·절단·상쇄의 오차 전파를 추적하고 허용오차와 비교한다. 정확 기준과 근사 출력의 비교 그림에서 두 경로가 언제 다른 값이 되는지 설명한다.
기술사 답안으로 전환하기
예상문제: “수치오차의 종류와 오차 전파를 설명하고 정보시스템 수치계산의 안정성 확보방안을 제시하시오.”
수치오차는 참값 또는 더 정확한 기준값과 근사값의 차이다. 절대오차는 두 값 차이의 절댓값, 상대오차는 참값이 0이 아닐 때 절대오차를 참값 크기로 나눈 값이다. 표현·반올림오차는 유한 비트 저장과 연산에서, 절단오차는 무한하거나 많은 계산을 유한 단계에서 멈출 때 생긴다. 측정 불확실성과 프로그램 논리 결함은 원인이 다르므로 따로 분류한다.
오차는 반복 덧셈에서 누적되고, 매우 큰 값에 작은 값을 더할 때 작은 정보가 사라지며, 거의 같은 두 근사값을 뺄 때 유효숫자가 지워져 상대오차가 커질 수 있다. 입력의 작은 변화가 출력에 크게 반영되는 문제와 불안정한 계산 절차를 구분해 민감도와 단계별 오차 상한을 본다.
금액은 최소 화폐단위 정수나 정확한 십진연산을 선택하고, 합산은 작은 값부터 또는 보정 알고리즘으로 수행한다. 상쇄를 피하는 동치 수식, 적절한 정밀도·반복 수렴기준, 범위·오버플로·언더플로 검사와 기준 사례 시험을 적용한다. 실수 동등성은 절대·상대 허용오차를 업무 경계에 맞춰 함께 쓰며 자료형·단위·연산순서·오차 추정과 예외를 결과에 기록한다.
자체 25점 문제
금액·센서·반복계산에서 표현·반올림·절단·입력오차가 최종결과에 미치는 영향을 분석하고 허용오차·자료형·연산순서·안정된 수식·수렴조건을 설계하시오.
요구어는 분석과 설계다. 숫자 자릿수만 늘리지 말고 업무 허용범위와 계산 민감도를 기준으로 통제한다.
25점 풀이 방향과 모범답안 보기
25점 답안 목차
- 입력범위·업무허용오차
- 자료형·표현오차
- 반올림·절단
- 반복누적
- 큰값·작은값 혼합
- 치명적 상쇄
- 수렴·오버플로·언더플로
- 기준사례·오차기록
25점 답안 도식
| 업무 정확도에서 계산으로 연결 | 통제할 계약 |
|---|---|
| 업무 허용오차 → 입력·자료형 | 단위·범위·금액/센서의 서로 다른 규칙 |
| 안정된 연산순서·수식 | 상쇄·정보손실과 정의역 |
| 반복·수렴·범위검사 | 구간 유지·오차상한·최대 반복·비정상값 |
| 결과 오차추정 → 허용 여부 | 실제 허용한 절대·상대 오차와 비교 |
오차 비교 그림과 앞의 √2 완성 계산을 아래 선택안에 적용한다.
25점 모범답안
먼저 금액·센서값·과학계산마다 허용할 절대·상대오차와 입력범위를 정한다. 금액은 정확한 십진단위가 필요하면 최소 화폐단위 정수나 적합한 십진 자료형을 선택하고, 센서값은 측정불확실성과 표현오차를 구분한다.
반복합산의 누적, 큰 값에 작은 값을 더할 때 정보손실, 거의 같은 수의 뺄셈에서 생기는 상쇄를 확인한다. 작은 값부터 합산하거나 보정합산을 사용하고 상쇄를 피하는 동치수식, 필요한 경우 더 높은 정밀도를 선택한다.
반복계산은 수렴기준·최대반복과 오차추정을 두고 오버플로·언더플로·비정상값을 검사한다. 기준사례와 경계값에서 결과를 검증하고 자료형·단위·연산순서·허용오차와 잔여오차를 기록해 최종값의 많은 소수 자릿수를 정확성으로 오해하지 않는다.
선택한 금액 계약은 0.01 단위 정수 저장·반올림 시점 명시, 센서 계산 계약은 절대오차≤0.01℃와 입력 불확실성 별도 보고다. 반복계산의 자체 예로 √2를 구할 때 [1,2]의 부호변화 구간을 유지하는 이분법을 택하고 구간폭/2≤10⁻⁶이면 종료한다. 초기폭 1을 19번 이분하면 중점오차 상한은 2⁻²⁰≈9.54×10⁻⁷이므로 통과한다. 최대 25회까지도 조건을 못 맞추거나 비정상값이 나오면 성공으로 표시하지 않는다. 반복값 두 개가 같다는 사실만으로 정확성 목표를 통과시키지 않는다.
출처와 적용 경계
부동소수점·반올림·절단·오차전파는 안정된 수치계산 기초개념이다. 금액·센서 사례는 자체 교육 예이며 특정 언어·하드웨어의 정확도 보장을 뜻하지 않는다.
자기교정과 조건 변경
| 잘못 쓴 답 | 수정 | 복습 |
|---|---|---|
| 소수 자릿수가 많으면 정확하다 | 참값 대비 오차와 허용범위를 봐야 한다 | 정의 |
| 0.1을 여러 번 더해도 항상 정확하다 | 이진 표현 근사와 누적오차를 고려한다 | 사례 |
| 거의 같은 수의 뺄셈은 안전하다 | 상쇄로 상대오차가 커질 수 있다 | 메커니즘 |
| 실수는 ==로 직접 비교하면 된다 | 업무 크기에 맞는 절대·상대 허용오차를 사용한다 | 실패 |
| 반복값이 더 이상 안 변하면 항상 참값이다 | 정밀도 한계·수렴오류·종료조건을 구분한다 | 비교 |
금액 단위가 원에서 센트처럼 소수로 바뀌면? 정확한 최소단위 표현과 반올림정책을 새 계약에 맞게 정한다.
입력 크기가 10억 배 커지면? 표현간격·오버플로·상대오차와 연산순서를 다시 검증한다.
허용오차가 10배 엄격해지면? 자료형·알고리즘·반복기준과 검증기준을 함께 재설계한다.
30초 정리
- 수치오차는 참값과 근사값의 차이이며 절대오차와 상대오차로 크기를 본다.
- 표현·반올림·절단오차는 유한 정밀도와 유한 계산 때문에 생기고 뒤 연산으로 전파된다.
- 반복 누적, 큰 값과 작은 값의 혼합, 거의 같은 수의 뺄셈은 오차를 키울 수 있다.
- 자료형·연산 순서·안정된 수식·허용오차·수렴과 범위 검사를 업무 정확도에 맞춰 정한다.