로그 함수나 사인 함수와 같은 것을 계산한다고 해보자. 가장 간단한 방법은, 간단히 계산기를 꺼내서 두들겨 보는 것이다. 그러나, 이것은 트랜지스터 시대를 살아가는 사람들의 이야기이고, 트랜지스터가 등장하기 전, 사람의 손으로만 계산을 해야 했던 시대에서는 어떠한가? 주어진 식을 테일러 급수와 같은 것으로 전개하여, 가능한 높은 정확도로 미리 계산하여 표로 만들어 두고, 이렇게 미리 만들어진 표를 참조하여 값을 얻는 것이 가장 간단한 방법이었을 것이다.
그러나, 이렇게 컴퓨터를 사용하는 방법이나, 급수 전개를 통한 방법으로 얻어진 값은 완전히 정확한 값은 아니다. 주어진 최초의 식을 테일러 급수를 사용하여 전개하면, 이것은 원래 식과 완전히 같은 식이 아니라, 비슷한 값을 얻을 수 있는 근사식의 형태로 바뀌며, 근사식이라는 근본적인 한계 때문에 오차가 발생할 수 밖에 없다. 물론 항을 늘려 계산하면 오차를 줄일 수 있지만, 이것이 원래의 값과 완전히 같다는 것을 보장하지는 않는다.
컴퓨터의 경우는 문제가 더 심각하다. 컴퓨터는 제한적인 메모리와 저장 장치를 가지고 있기 때문에, 무한대로 계산한다는 것은 애초부터 불가능하다. 더구나, 한번에 다룰 수 있는 데이터의 크기가 제한되어 있기 때문에, 자료 자체의 입력부터 처음의 정확도가 손실될 가능성이 있다. 즉, 컴퓨터를 사용하여 어떤 계산을 한다면, 근사식을 사용함으로써 발생하는 오차와, 컴퓨터에서 다루는 자료형 자체의 한계로 인한 값의 손실 모두를 염두에 두어야 한다.
컴퓨터를 사용한 수치 해석에서, 전자의 경우처럼 원래의 식을 근사식으로 바꾸어서 계산하는데서 오는 오차를 Truncation Error라고 하며, 후자처럼 컴퓨터가 다룰 수 있는 자료형의 제한에서 오는 오차를 Round-Off Error라고 한다.
'Algorithm' 카테고리의 다른 글
STL 벡터 리스트 (0) | 2014.11.13 |
---|---|
STL이란 (0) | 2014.11.13 |
정렬 시간복잡도 (0) | 2014.10.17 |
B트리 (0) | 2014.10.17 |
디자인패턴 observer (0) | 2014.10.17 |