Perhaps this is why engineers want 0**0 = 1
foreach my $close_to_zero (1e-3,
1e-4,
1e-5,
1e-6,
1e-7,
1e-8,
1e-9,
1e-10,
1e-11,
1e-12,
1e-13,
){
print $close_to_zero**$close_to_zero,"\n";
}
produces
0.993116048420934
0.999079389984462
0.999884877372469
0.999986184584876
0.999998388191734
0.99999981579321
0.999999979276734
0.999999997697415
0.999999999746716
0.999999999972369
0.999999999997007
If you approach zero from the negative side,
it doesn't work. There are many other directions
you can approach from, using complex numbers.
From these directions the answer also seems
to head toward a limit of 1.
use Math::Complex;
my $j=sqrt(-1)/100;
foreach my $close_to_zero (-1e-3-$j*1e-3,
-1e-4-$j*1e-4,
-1e-5-$j*1e-5,
-1e-6-$j*1e-6,
-1e-7-$j*1e-7,
-1e-8-$j*1e-8,
-1e-9-$j*1e-9,
-1e-10-$j*1e-10,
-1e-11-$j*1e-11,
-1e-12-$j*1e-12,
-1e-13-$j*1e-13,
){
print $close_to_zero**$close_to_zero,"\n";
}
prints
1.00689492851834+0.00322274943578533i
1.00091826683245+0.000322665621543586i
1.00011482165982+3.24709453669811e-05i
1.00001378423429+3.2697926634863e-06i
1.00000160867421+3.29277874043755e-07i
1.00000018389316+3.31579990412048e-08i
1.0000000206919+3.33882521438423e-09i
1.00000000229945+3.36185100395793e-10i
1.00000000025297+3.38487684801375e-11i
1.0000000000276+3.40790269818147e-12i
1.00000000000299+3.43092854902761e-13i
So my engineering view is that 0**0==1
most of the time, for large values of zero.
It should work perfectly the first time! - toma