http://qs1969.pair.com?node_id=134419

sifukurt has asked for the wisdom of the Perl Monks concerning the following question:

Good day, fellow monks. I've got a snippet of code that I'm hoping you can help me speed up. My code is to find the N-th root of a given number.
```use Math::BigFloat;

sub Root {
my \$num        = shift;
my \$root       = shift;
my \$iterations = shift || 5;
if ( \$num < 0 ) { return undef }
if ( \$root == 0 ) { return 1 }
my \$Num = Math::BigFloat->new( \$num );
my \$Root = Math::BigFloat->new( \$root );
my \$current = Math::BigFloat->new();
my \$guess   = Math::BigFloat->new( \$num ** ( 1 / \$root ) );
my \$t       = Math::BigFloat->new( \$guess ** ( \$root - 1 ) );
for ( 1 .. \$iterations ) {
\$current = \$guess - ( \$guess * \$t - \$Num ) / ( \$Root * \$t  );
if ( \$guess eq \$current ) { last }
\$t = \$current**(\$root-1);
\$guess = \$current;
}
return \$current;
}
This uses Newton's method for finding the roots. It produces very accurate results, provided you increase the number of iterations if you're dealing with large numbers and/or large roots. Therein lies the problem. If you want something relatively simply like the 5th root of 100:
```\$x = Root( 100, 5 );
```\$x = Root( 500000, 555 );