Zitat von
negaH:
Du kannst im Binomial kürzen, so das du mit normalen Integer den Wertebereich stark vergrößerst.
Ja, das geschickte Kürzen ist der Knackpunkt.
Habe da eine gute Implementierung im der Bibliothek
ESBMaths von
ESBConsult gefunden:
Delphi-Quellcode:
{:
ESBMaths 3.2.1 - contains useful Mathematical routines for Delphi 4, 5 & 6.
Copyright ©1997-2001 ESB Consultancy
ESB Consultancy retains full copyright.
ESB Consultancy grants users of this code royalty free rights
to do with this code as they wish.
}
function BinomialCoeff (N, R: LongWord): Extended;
var
I: Integer;
K: LongWord;
begin
if (N = 0) or (R > N) or (N > 1754) then
begin
Result := 0.0;
Exit;
end;
Result := 1.0;
if (R = 0) or (R = N) then
Exit;
if R > N div 2 then
R := N - R;
K := 2;
try
for I := N - R + 1 to N do
begin
Result := Result * I;
if K <= R then
begin
Result := Result / K;
Inc (K);
end;
end;
Result := Int (Result + 0.5);
except
Result := -1.0
end;
end;