#include #include #include long double PerfectRootEstimate( long double X ) { long double Guess; long double Test; long double Min = 0.69220062755534635386542199718278976149L; long double Max = 1546.0e0L; /* Max^Max = LDBL_MAX */ int n; for ( n = 0; n < 16; n++ ) { Guess = ( Min + Max ) * 0.5e0L; Test = powl( Guess, Guess ); if ( Test > X ) Max = Guess; else Min = Guess; } return Guess; } int main() { printf("%30.20LeL\n", PerfectRootEstimate( 27.0e0L ) ); printf("%30.20LeL\n", PerfectRootEstimate( 10000000000.0e0L ) ); printf("%30.20LeL\n", PerfectRootEstimate( LDBL_MAX ) ); return 0; }