#include #include #include #include long double B01LogFromE( long double x, long double k ); long double A02LogFromE( long double x, long double k ); long double A03LogFromE( long double x, long double k ); int main(int argc, char **argv) { long double x; long double k = 2.; char pszString[256] = "2"; if ( argc < 2 ) { printf( "Enter a number to find logarithm base e of:" ); fgets( pszString, sizeof( pszString ), stdin ); puts( pszString ); } else strncpy( pszString, argv[1], sizeof( pszString ) ); k = atof( pszString ); x = logl( k ); /* CORRECT ANSWER */ printf("k = %30.20LeL\nanswer = %30.20LeL\n", k, logl( k ) ); x = logl( k ) * 1.00001; /* form a extimate correct to 5 digits */ printf( "B01LogFromE = %30.20LeL\n", B01LogFromE( x, k ) ); printf( "A02LogFromE = %30.20LeL\n", A02LogFromE( x, k ) ); printf( "A03LogFromE = %30.20LeL\n", A03LogFromE( x, k ) ); return 0; } long double B01LogFromE( long double x, long double k ) { return ( k * x - expl( x ) + k ) / k; } long double A02LogFromE( long double x, long double k ) { long double ex = expl( x ); return x + 2. * ( -ex + k ) / ( ex + k ); } long double A03LogFromE( long double x, long double k ) { long double ex = expl( x ); long double ex2 = ex * ex; long double k2 = k * k; long double term = 4.0 * ex * k + ex2 + k2; return ( x * term - 3.0 * ex2 + 3.0 * k2 ) / term; }