# include # include # include int main ( ) { double a; double b; int i; int it; double tol = 1.0E-10; double w; double w_vec[8] = { 0.3517337112491958, 0.5671432904097839, 0.7258613577662263, 0.8526055020137255, 0.9585863567287029, 0.1000000000000000E+01, 0.1745528002740699E+01, 0.3385630140290050E+01 }; double x; double x_vec[8] = { 0.5000000000000000, 0.1000000000000000E+01, 0.1500000000000000E+01, 0.2000000000000000E+01, 0.2500000000000000E+01, 0.2718281828459045E+01, 0.1000000000000000E+02, 0.1000000000000000E+03 }; for ( i = 0; i < 8; i++ ) { x = x_vec[i]; w = x + log ( x ); it = 0; while ( 1 ) { if ( 100 < it ) { break; } if ( fabs ( ( x - w * exp ( w ) ) ) < tol * fabs ( ( w + 1.0 ) * exp ( w ) ) ) { break; } a = w * exp ( w ) - x; b = ( w + 1.0 ) * exp ( w ) - ( w + 2.0 ) * ( w * exp ( w ) - x ) / ( 2.0 * w + 2.0 ); w = w - a / b; it = it + 1; } printf ( " %8.4f %3d %14g %14g %8.2e\n", x, it, w, w_vec[i], fabs ( w - w_vec[i] ) ); } return 0; }