더북(TheBook)

지금까지 소개한 예제 코드에서는 tgmath.h 헤더1에 정의된 표준 매크로인 fabs를 사용했다. 이 매크로는 double 타입의 절댓값을 계산한다. 다음으로 소개할 예제 3-1(heron.c)은 지금까지 본 예제와 알고리즘은 같지만, fabs 대신 여러 가지 비교 연산자를 사용해서 특정한 고정 숫값과 비교한다. 가령 eps1m24를 1 - 2-24으로 정의하고, eps1p24를 1 + 2-24으로 정의한다. 5.3절에서 0x1P-24와 같은 상수를 정의 작업에 활용하는 방법에 대해 살펴볼 것이다.

가장 먼저 할 일은 현재 관심 대상 숫자인 a와 현재 추정값 x를 곱한 값을 각각 1.5, 0.5와 비교하고, 곱셈 결과가 1에 가까워질 때까지 x0.52를 곱하는 것이다. 그러고 나서 두 번째 반복할 때 코드에 나온 것처럼 헤론의 근사 공식을 적용해서 근삿값을 구하고 곱의 역수를 높은 정확도로 계산한다.

이 프로그램이 하는 일을 크게 보면 커맨드 라인을 통해 전달된 숫자의 역수를 계산하는 것이다. 이 프로그램을 실행하면 다음과 같은 결과가 나온다.

 

터미널

 0 > ./heron 0.07 5 6E+23
 1 heron: a=7.00000e-02, x=1.42857e+01, a*x=0.999999999996
 2 heron: a=5.00000e+00, x=2.00000e-01, a*x=0.999999999767
 3 heron: a=6.00000e+23, x=1.66667e-24, a*x=0.999999997028

 

 


1 tgmath는 ‘type generic mathematical functions’의 줄임말이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.