Listing 2: Test program

// Test program for math-complex.h. This file can be

// compiled by either C99 or C++.

// An extended version of this test is available on

// the CUJ website at www.cuj.com/code.

#include <stdio.h>

#include "math-complex.h"

static const long double pi =

3.141592653589793238462643383279502884197L;

int main()

{

// Establish the size of floating point type on

// this platform. Note on some platforms, two or

// more of these datatypes may have the same size.

printf("sizeof(float) = %d\n", (int) sizeof(float));

printf("sizeof(double) = %d\n", (int) sizeof(double));

printf("sizeof(long double) = %d\n", (int) sizeof(long double));

// The overloaded library function sin() should return

// the same type as its argument. So, take the sizeof

// function calls passing a float, double, and long

// double to see if the function result has sizeof

// a float, double, and long double, respectively.

printf("sizeof sin(0.0F) = %d\n", (int) sizeof sin(0.0F));

printf("sizeof sin(0.0) = %d\n", (int) sizeof sin(0.0));

printf("sizeof sin(0.0L) = %d\n", (int) sizeof sin(0.0L));

// arc sine of 1 is pi/2. Try this for the three real

// floating point types and see if the result is more

// precise as the float point type gets more precise.

printf("pi/2 = %.20Lf\n", pi/2);

printf("asin(1.0F) = %.20f error=%Lg\n",

asin(1.0F), asin(1.0F) - pi/2);

printf("asin(1.0) = %.20f error=%Lg\n",

asin(1.0), asin(1.0) - pi/2);

printf("asin(1.0L) = %.20Lf error=%Lg\n",

asin(1.0L), asin(1.0L) - pi/2);

return 0;

}

-- End of Listing --