Ich schmeiß hier jetzt mal vollkommen ungetestet wilde Behauptungen in den Raum:
Zitat:
Delphi-Quellcode:
function foo_(x: Double; degree: integer): Double;
var
diff: array of Double; // für die Differenzenquotienten
n, m: integer;
begin
SetLength(diff, degree + 1);
for n := 0 to degree do
diff[n] := foo(x + (-degree/2 + n) * PRECISION);
for n := 0 to degree do
for m := 0 to n - 1 do
diff[m] := (diff[m+1] - diff[m]) / PRECISION;
Result := diff[0];
end;
Erstens: In der zweiten for-Schleife kannst du dir eigentlich den Durchlauf für n=0 sparen. Da liegt aber sicher nicht der Fehler.
Aber: In der inneren Schleife (for m := ...) ist
IMHO die Obergrenze falsch berechnet. Es müsste heißen
for m := 0 to degree - (n-1) do...