Mach es doch so:
Delphi-Quellcode:
Function MegaPotenzierer (a,b,x,y : Extended) : Extended;
Const
ccZero = 1E-5; // Hab vergessen, wie man floats auf 0 prüft
ccMin = 0.000001; // kleinstes Zwischenergebnis
ccMax = 100000000; // höchstes Zwischenergebnis
Begin
Result := a; x:=x-1;
Repeat
while (x>ccZero) do begin
Result := result * a;
x:=x-1;
if (Result > ccMax) Then Break; // jetzt nicht mehr weiterrechnen
End;
while (y>ccZero) do begin
Result := result / b;
y := y - 1;
If Result > ccMax Then Break;
End;
Until (x<ccZero) and (y<ccZero); // Heisst das nicht 'IsZero (x)'?
End;
Ungetestet, aber ich potenziere so lange mit a, bis ich nicht mehr darf, oder bis das Zwischenergebnis größer als ein bestimmter Wert ist. Dann wird so lange durch b geteilt, bis ich nicht mehr darf, oder das Zwischenergebnis wieder kleiner als ein Minimalwert ist. Das wird so lange wiederholt, bis nichts mehr zu tun ist.