튜링상 관련 업적

수치해석에 있어서 고속 디지털 컴퓨터를 사용하는 방법에 관한 연구, 특히나 선형대수 계산과 역방향 오차해석에서의 업적을 인정함.

1970년 튜링상 선정 이유​5​

전자식 컴퓨터는 순전히 수학 계산을 위해 시작되었다고 해도 과언이 아니다. 그래서 수치해석과 전자식 컴퓨터는 찰떡궁합이라고 보아도 좋겠다.

위키피디아에서는 수치해석Numerical Analysis에 대한 정의를 이렇게 내리고 있다.

해석학(수학) 문제에서 수치적인 근삿값을 구하는 알고리듬을 연구하는 학문.​6​​#​

정의만 보면 수치해석은 컴퓨터와 직접적인 관련이 없다. 하지만 알고리듬을 만들었으면 그것을 써먹어야 할 텐데, 현실적인 방법은 컴퓨터밖에 없다. 왜냐하면 그 알고리듬을 따라서 수작업으로 계산하다가는 엄청나게 오랜 시간이 걸리기 때문이다.

수치해석은 최초의 전자식 컴퓨터가 등장하기 전부터 있었다. 때에 따라서는 수작업으로 계산하기도 했는데, 기계식 계산기가 나오면서 본격적으로 사용하려는 시도가 벌어졌다. 제2차 세계대전에 무기 개발을 위해서 많은 계산이 이루어졌고 아직 전자식 컴퓨터가 등장하지 않았으므로 기계식 계산기가 동원되었다. 매우 지루하고 고된 작업이었음에 틀림이 없다. 윌킨슨도 이런 일을 했으며 그 당시 사용했던 기계식 계산기는 Facit calculator였다고 한다.​3​ 정확한 모델명은 알 수 없으나 당시에 쓰이던 Facit TK라는 모델을 보면, 덧셈/뺄셈/곱셈/나눗셈 계산을 할 수 있다. 곱셈은 9자리 x 8자리 계산을 할 수 있었지만 결과값은 13자리까지만 구했다.​7​

FACIT 기계식 계산기​**​

수치해석에서 많이 나타나는 풀이 형태가 선형대수이다. 선형대수는 복수 개의 변수들로 구성된 방정식이 여러 개 주어지는 형태이고 결국은 행렬 형태로 수식을 구성한다. 윌킨슨이 전쟁 중에 풀었던 12개 변수로 구성된 방정식 문제가 선형대수였다. 그렇다면 그가 선형대수의 오차해석에 어떤 기여를 했는지 살펴보자.


오차

오차해석error analysis이란 문제의 답을 계산하여 구한 후에 그 값이 실제 정답과 얼마나 차이가 나는지 따져보는 것을 말한다. 물론 정답과 다르면 틀린 답이라고 할 수도 있겠으나, 경우에 따라서는 정답을 정확하게 계산할 수 없기 때문에 어쩔 수 없이 차선책으로 받아들여야 할 때도 있다. 그렇지만 무조건 받아들일 수도 없다. 정답과 너무 차이가 나면 곤란하다. 그래서 내가 계산해서 구한 답이 정답과 얼마나 차이가 났을지 가늠할 방법이 필요하다. 이것을 오차해석이라고 한다.

이런 오차가 발생하는 이유는 여러 가지가 있을 수 있다. 그중 컴퓨터에서 계산하기 때문에 발생하는 오차로는 반올림 오차가 대표적이다.

반올림 오차

여기서 말하는 반올림 오차roundoff error는 우리가 종이 위에서 계산을 할 때 사용하는 반올림과 차이가 있으니 주의할 필요가 있다. 어떤 차이가 있는지 살펴보겠다.

수학의 세계와 컴퓨터의 세계는 수를 표현하는 방식이 다르다. 수학의 세계는 완벽하다. 모든 수를 하나의 손실도 없이 완벽하게 표현할 수 있다. 그 값이 수천 조가 넘건, 아니면 소수점 아래로 100의 자리에 해당하건 간에 수학의 세계는 있는 그대로 값을 다룰 수 있다. 수학의 세계는 추상의 세계이기 때문이다.

하지만 컴퓨터의 세계는 다르다. 현실의 물리적 세계에 있는 컴퓨터에서 다룰 수 있는 수의 크기는 한계가 있다. 그 이유는 프로세서의 구조 때문이다. 덧셈이나 곱셈을 할 때 프로세서가 입력으로 받아들일 수 있는 숫자의 크기는 내부 레지스터의 크기에 제한받는다. 레지스터란 계산을 위해 임시로 데이터를 저장하는 공간이다. 프로세서를 표현할 때 우리는 흔히 ‘8비트 프로세서’라거나 ’64비트 프로세서’라는 표현을 사용하는데 이때 이 8, 64라는 값이 결국 레지스터의 크기이다.​††​ 따라서 8비트 프로세서는 레지스터의 크기가 8비트이므로 2진수로 00000000에서부터 11111111까지만 표현이 가능하다. 이 값이 정수라면 10진수로는 0에서부터 255까지인 셈이다. 내가 256이라는 값을 다루고 싶다면 이 레지스터로는 불가능하다. 이제 실수의 경우에 대해 생각해보자.

전자식 컴퓨터의 시작이 숫자 계산 때문이었다. 단순한 정수 계산이 아니라 복잡한 실수 계산이 필수적이었다. 그래서 컴퓨터에서 실수를 표현할 방법이 필요했다. 고정소수점 방식과 부동소수점 방식이 등장했다. 이에 대한 자세한 설명은 피하겠다. 여기서는 고정소수점 방식의 사례를 들어보려 한다.

고정소수점 방식이란 레지스터에 저장된 값이 소수점 기준으로 특정 자리에 있다고 보는 것이다. 앞의 예에서 우리는 8비트 레지스터에 11111111이라는 값이 있으면 255라고 해석했다. 이는 이 레지스터의 값이 소수점 기준으로 왼쪽의 값만 저장한다고 약속한 것이다. 그렇다면 반대로 이 값이 소수점 기준으로 오른쪽의 값만 저장한다고 가정해보자. 그렇다면 11111111이라는 값은 2진수로 0.11111111로 해석된다(10진수로 바꿔보면 0.99609375가 된다). 폰 노이만이 프린스턴 대학교의 고등연구소에서 컴퓨터를 설계했을 때 처음 선택한 방식이 이러했다. 당시는 고난도의 프로세서 설계가 어려웠기 때문에 현실적으로 택한 방법이었다.​8​ 따라서 컴퓨터로 계산하기 전에 모든 숫자를 1보다 작게 정규화normalize하는 과정이 필요했고, 계산 과정 중에 재정규화scaling을 하고 계산이 완료된 후에는 보정denormalize해야 했다.

자. 이제 내가 저장하고 싶은 값이 2진수로 0.101010101이라고 해보자. 그런데 소수점 이하의 값이 2진수로 9자리를 차지하고 있다. 이것을 8비트 레지스터에 저장하려면 결국 한 자리는 포기해야 한다. 바로 여기에서 오차가 발생한다. 이것을 반올림 오차roundoff error라고 부른다. 보통은 오차를 최소화하기 위해 가장 아랫수를 포기하게 되므로 앞의 예에서는 0.10101010이 저장된다. 반올림 오차는 2진수로 0.000000001(10진수로 0.001953126)이다.

절단 오차 (truncation error)

컴퓨터를 사용한 수치해석에서 생길 수 있는 또 하나의 오차이다. 수학 공식 중에는 계산을 무한히 진행하도록 모델링되어 있는 것들이 있다. 대표적인 것이 푸리에 급수이다. 수학의 세계에서는 무한infinity을 있는 그대로 사용할 수 있으나, 현실 세계에서는 답을 구해야 하므로 그렇게 할 수 없다. 따라서 어느 정도 계산하면 종료할 수밖에 없다.

이는 꼭 컴퓨터를 사용해서라기보다는 현실적으로 계산을 완료하기 위해 피치 못해 발생하는 오차이다.

윌킨슨은 주로 행렬 연산에 치중했기 때문에 절단 오차를 고민할 필요가 없었다. 그의 오차해석 연구는 반올림 오차와 관계된다.

1 2 3 4 5