Das ganze lässt sich ein wenig aufdröseln. Der Ansatz lautet im Reellen wie im Komplexen: a^b = exp(b*ln(a))
Du brauchst also nur noch die komplexen Varianten der Exponentialfunktion und des natürlichen Logarithmus, und kannst dann sehr elegant 2 komplexe Argumente miteinander Potenzieren.
Exp(C):
Delphi-Quellcode:
function expC(const C : TComplex) : TComplex;
var
sn, cs : extended;
t : double;
begin
sincos(C.i, sn, cs);
t := exp(C.r);
result.r := t * cs;
result.i := t * sn;
end;
Ln(C):
Delphi-Quellcode:
function lnC(const C : TComplex) : TComplex;
begin
result.r := ln(sqrt(sqr(C.r)+sqr(C.i)));
result.i := argC(C).r;
end;
Wobei du hier noch argC() brauchst:
Delphi-Quellcode:
function argC(const C : TComplex): double;
var
temp : double;
begin
result := 0;
temp := 0;
if (C.r = 0) and (C.i = 0) then Exit;
if C.i <> 0 then
begin
result := pi / 2 * Sign(C.i);
Exit;
end
else
begin
if C.r > 0 then
begin
result := 0;
Exit;
end
else
begin
result := pi;
Exit;
end;
end;
if C.r <> 0 then
temp := ArcTan(Abs(C.i / C.r));
if C.r > 0 then
begin
if C.i > 0 then
begin
result := temp;
Exit;
end
else
begin
result := -temp;
Exit;
end;
end
else
begin
if C.i > 0 then
begin
result := pi - temp;
Exit;
end
else
begin
result := temp - pi;
Exit;
end;
end;
end;
Schaut erstmal wild aus, funktioniert aber auch.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)