//////////////////////////////////////////////////////////////////////////////// // File: testquadruplefactorial.c // // // // Test the functions Quadruple_Factorial(), Quadruple_Factorial_Max_Arg(), // // and xQuadruple_Factorial() in the file quadruple_factorial.c. // // // //////////////////////////////////////////////////////////////////////////////// #include #include #include // Externally defined routines extern double Quadruple_Factorial( int n ); extern long double xQuadruple_Factorial( int n ); extern int Quadruple_Factorial_Max_Arg( void ); int main() { double z; long double xz; int i; printf("Program: testquadruplefactorial.c\n"); printf("Test Quadruple_Factorial() \n\n"); printf("Exceptional values: Argument <= -4, return 0,\n"); printf(" Argument > Quadruple_Factorial_Max_Arg() return DBL_MAX\n\n"); printf("(-4)!!! %22.16e\n",Quadruple_Factorial(-4)); printf("(%3d)!!! %22.16e\n",Quadruple_Factorial_Max_Arg()+1,Quadruple_Factorial(Quadruple_Factorial_Max_Arg() + 1)); printf("(%3d)!!! %22.16e\n",Quadruple_Factorial_Max_Arg()+2,Quadruple_Factorial(Quadruple_Factorial_Max_Arg() + 2)); printf("\n\nQuadruple Factorials\n"); printf(" n!!!! Quadruple_Factorial(n) n*Quadruple_Factorial(n-4) Relative Error /\n"); printf(" DBL_EPSILON\n"); for (i = -3; i <= Quadruple_Factorial_Max_Arg(); i++) { if (i <= 0) z = 1.0; else if (i <= 4) z = i; else z = Quadruple_Factorial(i-4) * i; printf("%4d!!!! %22.16e %22.16e %10.4f\n",i,Quadruple_Factorial(i),z,(Quadruple_Factorial(i)-z)/(Quadruple_Factorial(i)*DBL_EPSILON)); } printf("\nTest xQuadruple_Factorial() \n\n"); printf("Exceptional values: Argument <= -4, return 0,\n"); printf(" Argument > Quadruple_Factorial_Max_Arg() return DBL_MAX\n\n"); printf("(-4)!!! %22.16Le\n",xQuadruple_Factorial(-4)); printf("(%3d)!!! %22.16Le\n",Quadruple_Factorial_Max_Arg()+1,xQuadruple_Factorial(Quadruple_Factorial_Max_Arg() + 1)); printf("(%3d)!!! %22.16Le\n",Quadruple_Factorial_Max_Arg()+2,xQuadruple_Factorial(Quadruple_Factorial_Max_Arg() + 2)); printf("\n\nxQuadruple Factorials\n"); printf(" n!!!! Quadruple_Factorial(n) n*Quadruple_Factorial(n-4) Relative Error /\n"); printf(" DBL_EPSILON\n"); for (i = -3; i <= Quadruple_Factorial_Max_Arg(); i++) { if (i <= 0) xz = 1.0L; else if (i <= 4) xz = (long double)i; else xz = xQuadruple_Factorial(i-4) * (long double)i; printf("%4d!!!! %22.16Le %22.16Le %10.4Lf\n",i,xQuadruple_Factorial(i),xz,(xQuadruple_Factorial(i)-xz)/(xQuadruple_Factorial(i)*(long double)DBL_EPSILON)); } }