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