#include #include #include "Fast_trig.h" #define MAX(x,y) ((x) >= (y) ? (x) : (y)) int main() { int N = 100001; double two_pi = 6.2831853071795864769252867665590057683943387987; double dx = two_pi/(double) N; double max_quadratic_256 = 0.0; double max_quadratic_64 = 0.0; double max_cubic_256 = 0.0; double max_cubic_64 = 0.0; double max_linear_chebyshev_256 = 0.0; double max_linear_chebyshev_interior_256 = 0.0; double max_linear_optimized_256 = 0.0; double max_linear_optimized_interior_256 = 0.0; int i; for ( i = 0; i <= N; ++i ) { double x = (double) i / (double) N * two_pi; max_quadratic_256 = MAX( max_quadratic_256, fabs( sin(x) - quadratic_sin_256(x) ) ); max_quadratic_64 = MAX( max_quadratic_64, fabs( sin(x) - quadratic_sin_64(x) ) ); max_cubic_256 = MAX( max_cubic_256, fabs( sin(x) - cubic_sin_256(x) ) ); max_cubic_64 = MAX( max_cubic_64, fabs( sin(x) - cubic_sin_64(x) ) ); max_linear_chebyshev_256 = MAX( max_linear_chebyshev_256, fabs( sin(x) - linear_chebyshev_sin_256(x) ) ); max_linear_optimized_256 = MAX( max_linear_optimized_256, fabs( sin(x) - linear_optimized_sin_256(x) ) ); if ( 4*256*i < 249*N ) { max_linear_chebyshev_interior_256 = MAX( max_linear_chebyshev_interior_256, fabs( sin(x) - linear_chebyshev_sin_256(x) ) ); max_linear_optimized_interior_256 = MAX( max_linear_optimized_interior_256, fabs( sin(x) - linear_optimized_sin_256(x) ) ); } } printf( "The maximum quadratic error (256): %16.16f\n", max_quadratic_256 ); printf( "The maximum quadratic error (64): %16.16f\n", max_quadratic_64 ); printf( "The maximum cubic error (256): %16.16f\n", max_cubic_256 ); printf( "The maximum cubic error (64): %16.16f\n", max_cubic_64 ); printf( "The maximum linear (Chebyshev) error (256): %16.16f (%16.16f)\n", max_linear_chebyshev_256, max_linear_chebyshev_interior_256 ); printf( "The maximum linear (optimized) error (256): %16.16f (%16.16f)\n", max_linear_optimized_256, max_linear_optimized_interior_256 ); return 0; }