본문 바로가기

수학/수치해석

[수치해석 01] 근사값과 반올림 오차

유효숫자

신뢰를 가지고 사용할 수 있는 수치의 개수. 정확한 자릿수에 하나의 추정 자리 수를 더한 것.

측정 장치에서는 작은 눈금의 반을 나누어 추정 자리 수를 결정하는 것이 관례.

 

Ex1) 만약 1의 자리까지 유효한 측정 장치에 대해 눈금이 20과 21 사이에 있다면,  20.5로 추정할 수 있다.

Ex2) 과학적 표시법으로 나타내면, 7.94 * 10^4 는 3자리의 유효 숫자를 가진다.

 

 

 

정확도와 정밀도

정확도 (accuracy)

계산 또는 측정에 의한 값이 얼마나 참값에 가까운 정도

Ex) 양궁에서 화살이 전체적으로 10점 부근에 분포하고 있는 경우 정확도가 높은 것이다.

 

정밀도 (precision)

계산 또는 측정한 값들이 서로 얼마나 가까운 정도

Ex) 사격시 탄착군이 특정 위치로 몰려있다면, 이는 정밀도가 높은 것이다.

 

 

 

오차 (error)

수학적 연산의 경우 근사값을 이용하므로, 오차가 발생할 수 있다. 이때, 오차는 크게 두 종류가 존재한다.

 

반올림 오차

제한된 유효 숫자를 가진 숫자를 사용하여 계산할 때 발생하는 오류이다.

컴퓨터가 숫자 정보를 구현할 때 이진수로 표현하므로 이런 오차가 발생한다.

 

절단 오차(수학적 근사)

정확한 수학식으로 표현하기 위해 사용되는 오차로, 무한한 항을 유한한 항으로 표현할 때 나타날 수 있다.

무한 급수를 특정한 값으로 나타내는 경우, 이 오차가 발생한다.

 

 

참값과 근사값 사이 관계식

 

True value = approximation + error

error = True value - approximation

 

이때 발생하는 오차는 정확한 오차이다. 앞으로 이 오차를 Et 로 표기한다.

 

𝐸𝑡 : 참오차. 실제의 오차

Ea: 근사 오차. 근사한 오차

 

오차의 정의

참 백분율 상대오차 (True percent relative error)

𝜀t = (True value - approximation)( = 𝐸𝑡) / True value * 100%

 

백분율 상대 오차 (percent relative error)

𝜀a = Ea / approximation * 100%

 

반복법 사용 수치해법의 백분율 상대오차

𝜀a = (현재 근사값 - 이전 근사값) / 현재 근사값 * 100%

 

종료 판정 기준 (Stopping criterion)

|𝜀a| < 𝜀s : 미리 정해둔 수치보다 오차 %가 작으면 종료 

 

Ex) A와 B에 대해 참 값이 10000, 10이고, 이를 9999, 9로 측정하였다.

 

1) 참오차

 

Et(A) = 10000 - 9999 = 1

Et(B) = 10 - 9 = 1

2) 참 백분율 상대 오차

 

𝜀t(A) = Et(A) / 10000 * 100% = 0.01%

𝜀t(B) = Et(B) / 10 * 100% = 10%

 

 

반복 연산을 위한 컴퓨터 알고리즘

Function IterMeth(val, es, maxit)
  iter = 1 //초기 시작
  solution = val // 답을 val로 잡고 시작한다.
  𝜀a = 100 // 상대오차를 100%로 간주하고 시작한다.
  while (𝜀a > 𝜀s && iter < maxit)
      solold = solution
      solution = ... //답을 찾는 코드
      iter = iter + 1 // 반복횟수 증가
      if (solution != 0)
          𝜀a = abs((solution - solold) / solution) * 100
          //iteration 기반 상대오차 구하는 공식
  return solution

 

반올림 오차 (roundoff error)

 

컴퓨터는 유한한 개수의 유효숫자를 가지고 계산하므로, 수를 표현하는데 유한하고 정밀도에도 한계가 존재한다.

예를 들어 1/3  = 0.33333... 이고, 0.1은 2진법으로 정확하게 표현이 불가능하다.

반올림 오차는 유효숫자가 생략됨으로써 발생하는 오차라고 볼 수 있다.

 

컴퓨터에서의 수의 표현

10진수 : 0~9 으로 10개의 숫자를 이용하여 나타낼 수 있는 수.

2진수 : 0, 1 사용하여 나타낼 수 있는 수. n자리의 2진수로는 2^n개의 숫자를 표현할 수 있다.

bit : binary digit

byte : 8bit

 

위치표기법 (positional notation)

기본 숫자의 조합과 더불어 크기를 규정하는 위치값 또는 자리 값을 이용하여 표기하는 것.

 

Ex1) 739 = 7 * 10^2 + 3 * 10^1 + 9 * 10 ^ 0

Ex2) 101.1 = 1 * 2^2 + 0 * 2^1 + 1 * 2^0 + 1 * 2^-1 = 5.5

 

정수의 표현 

1 byte(8-bit) : 2^8

signed : -128 ~ 127

unsigned: 0 ~ 255

 

2 byte(16-bit) : 2^16

signed : -32768 ~ 32767

unsigned : 0 ~ 65535

 

4 byte(32-bit): 2^32 : 4G(42억)

 

컴퓨터 내부에서  숫자는 이진수로 표현하는데, 특정 숫자를 표현하는데 있어서 특정 규격을 이용한다. 해당 규격에 따라 숫자 표현의 한계가 정해지며, 그 이상을 표현할 수는 없다. 8bit 정수로는 이러한 한계때문에 300을 표현할 수 없다.

 

Overflow: 특정 자료형으로 표현할 수 없는 숫자에 대해 자릿수 잘림 등이 발생

 

실수의 표현

 

주로 32bit, 64bit를 표현한다.

 

32bit : 10^-38 ~ 10^38

64bit: 10-308 ~ 10^30

 

Overflow + Underflow(0에 가까운 값이 0이 되는 경우) 발생

 

무한을 유한하게 표현해야 하므로 round-off(반올림 오차) 발생

 

반올림 오차가 증가하는 경우

 

뺄셈의 무효화 : 비슷한 숫자를 빼면 유효숫자 감소

Ex) 0.7642e3 - 0.7641e3 = 0.100000000....

처음에는 3자리의 유효숫자를 가졌으나, 계산의 결과는 2자리의 유효숫자를 가지게 되었다.

 

큰수와 작은수 덧셈

Ex) 1e9 + 1e-9 = 1.000000000000000e+09

오차가 전달되는 과정에 반올림 오차가 증가함.

 

대용량 계산

for(i = 0; i < 1000; i++) sum += 0.1;

sum = 99.999999999998593

아주 작은 수를 이용하여 대량의 계산을 수행하면 오차가 누적되면서 반올림 오차도 함께 증가한다.

 

오점(smearing)

특정 시점의 항이 그전 항까지의 합보다 크면, 오히려 오차가 더 커진다.

결과를 새로운 항이 좌지우지하게 되는 경우.