Delphi-PRAXiS
Seite 1 von 7  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   n über k - berechnen!? (https://www.delphipraxis.net/38262-n-ueber-k-berechnen.html)

Plague 16. Jan 2005 21:14


n über k - berechnen!?
 
Hallo wie kann ich das mathematische "n über k" berechnen?
Kennt da jemand den Quelltext?

Gruß
Thomas

bttb930 16. Jan 2005 21:22

Re: n über k - berechnen!?
 
n über k = n! / (k! (n-k)!)

das ist leicht zu programmieren, oder?

Kryoko 16. Jan 2005 21:24

Re: n über k - berechnen!?
 
Hi !

Wenn ich mich nicht irre meinst du mit "n über k" die Binomialkoeffizienten (irre ich mich ??)
Berechnet werden die mit
n! / ((n - k)! * k!)

Delphi-Quellcode:
function fakultaet(N: Int64): Int64;
var
  i: Integer;
begin
  Result := 1;
  for i := 1 to N do
    Result := Result * i
end;

function nueberk(n, k: Integer): Int64;
begin
  Result := fakultaet(n) / (fakultaet(n - k) * fakultaet(k))
end;

xineohp 16. Jan 2005 21:40

Re: n über k - berechnen!?
 
jungs, denkt doch mal ein bisschen nach!

schon 21! sprengt mit 5,09*10^19 die int64-Grenzen (2^63 = 9,22*10^18) !!

Kryoko 16. Jan 2005 21:45

Re: n über k - berechnen!?
 
ist mir auch klar...
der Quellcode sollte niemals 100% funktionstüchtig sein...sonst hät' ich da noch was mit kürzen etc. geschrieben.
er wollte nur Quellcode. :evil:

Oder alles mit Extended FLoats geschrieben...

xineohp 16. Jan 2005 21:47

Re: n über k - berechnen!?
 
hm, da hast du wohl Recht ... aber gerade das ist doch das Problem an der Sache, so ist die Lösung doch witzlos, da sie in 50% der Fälle nicht geeignt ist :zwinker:

Dani 16. Jan 2005 21:54

Re: n über k - berechnen!?
 
Delphi-Quellcode:
function Binomial(n, k: Integer): Extended;
 begin
  If (k < 0) or (n < 0) then raise {Fantasie-Excpetion};
  If (k = 0) or (k=n) then Result := 1
   else Result := n/k * Binomial(n-1, k-1);
 end;
bzw.

Delphi-Quellcode:
function Binomial(n, k: Cardinal): Extended;
 begin
  If (k = 0) or (k=n) then Result := 1
   else Result := n/k * Binomial(n-1, k-1);
 end;

xineohp 16. Jan 2005 22:13

Re: n über k - berechnen!?
 
womit aber das Problem mit den zu großen Zahlen bestehen bleibt.

Dani 16. Jan 2005 22:23

Re: n über k - berechnen!?
 
Die Grenze des Berechenbaren liegt aber viel höher als bei Int46. Für die Praxis reicht es bestimmt.

xineohp 16. Jan 2005 22:42

Re: n über k - berechnen!?
 
eben nicht!

die Standardaufgaben zu Bernoulliketten arbeiten mit n=10 bis n=100. Und ab 21 ist int64 zu klein!


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr.
Seite 1 von 7  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz