ニュートン法による平方根算出をやってみる

use strict;
use warnings;
use List::Util qw/min/;

sub newton_sqrt {
    my $n = shift;
    my $p = shift || 8;
    my $x = 0;

    do {
        ++$x;
    } while (($x **  2) < $n);

    $x += 2;

    my @data;

    for (0..$x) {
        $x = sprintf("%.8f", ($x + $n / $x) / 2);
        push @data, $x;
    }
    return min(@data);
}

print newton_sqrt(2);