#!/usr/bin/perl use strict; use warnings; my ($X, $Y, $n) = @ARGV; $n ||= 20; my $Z = $X ** $Y; # f(z) = log z - y * log x = 0; # f'(z) = f1(z) = 1/z my $ylogx = $Y * log $X; my $z = 1; for my $i (1..$n) { my $fz = log($z) - $ylogx; my $f1z = 1 / $z; $z = $z - $fz / $f1z; my $e = abs($z - $Z); printf "%3d: z=%8f, e=%8f\n", $i, $z, $e; }