Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

Re: Problem: Fakultät -> großes Ergebnis

  Alt 20. Jul 2008, 18:12
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;
  Mit Zitat antworten Zitat