program main implicit none real ( kind = 8 ) a real ( kind = 8 ) b integer ( kind = 4 ) i integer ( kind = 4 ) it real ( kind = 8 ) :: tol = 1.0D-10 real ( kind = 8 ) w real ( kind = 8 ), save, dimension ( 8 ) :: w_vec = (/ & 0.3517337112491958D+00, & 0.5671432904097839D+00, & 0.7258613577662263D+00, & 0.8526055020137255D+00, & 0.9585863567287029D+00, & 0.1000000000000000D+01, & 0.1745528002740699D+01, & 0.3385630140290050D+01 /) real ( kind = 8 ) x real ( kind = 8 ), save, dimension ( 8 ) :: x_vec = (/ & 0.5000000000000000D+00, & 0.1000000000000000D+01, & 0.1500000000000000D+01, & 0.2000000000000000D+01, & 0.2500000000000000D+01, & 0.2718281828459045D+01, & 0.1000000000000000D+02, & 0.1000000000000000D+03 /) do i = 1, 8 x = x_vec(i) w = x + log ( x ) it = 0 do if ( 100 < it ) then exit end if if ( abs ( ( x - w * exp ( w ) ) ) < & tol * abs ( ( w + 1.0D+00 ) * exp ( w ) ) ) then exit end if a = w * exp ( w ) - x b = ( w + 1.0D+00 ) * exp ( w ) & - ( w + 2.0D+00 ) * ( w * exp ( w ) - x ) / ( 2.0D+00 * w + 2.0D+00 ) w = w - a / b it = it + 1 end do write ( *, * ) x, it, w, w_vec(i), abs ( w - w_vec(i) ) end do return end