May 01, 2003
Floating-Point Math: In the Intersection of C and C++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 --
|
|
||||||||||||||||||||||||||||
|
|
|
|