Код
(* Функция вычисления степени a^b *)
function power(a,b:real):real;
function relerror(observed,actual:real):real;
begin
if actual=0.0 then relerror:=abs(observed)
else relerror:=abs(observed/actual-1);
end;
var
i:byte;
res:real;
begin
if (trunc(B)=B) and (b>0) then
begin
res:=1;
for i:=1 to trunc(B) do
res:=res*a;
power:=res;
exit;
end;
if a=0 then
if b=0 then power:=1 else if b<0 then else power:=0
else if a<0 then if abs(B)< 1e-10 then power:=1
else if relerror(b,round(B))< 1e-8 then
power:=(1-2*ord(odd(round(B))))*exp(b*ln(abs(a)))
else if (relerror(1/b,round(1/B))< 1e-8) and odd(round(1/B)) then
power:=-exp(b*ln(abs(a)))
else else power:=exp(b*ln(a))
end;