Delphi-PRAXiS
Seite 2 von 7     12 34     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)

Dani 16. Jan 2005 22:53

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

die Standardaufgaben zu Bernoulliketten arbeiten mit n=10 bis n=100. Und ab 21 ist int64 zu klein!
Der Ansatz, den ich gepostet habe kommt auch mit n = 5000 klar (wird aber irgendwann ungenau). Die Fakultät wird wegen der Rekursion nie als Ganzes berechnet.

JasonDX 17. Jan 2005 06:36

Re: n über k - berechnen!?
 
probier das mal:
Delphi-Quellcode:
function nuberk(n, k: integer): extended;
var
  i: integer;
begin
  result := 1;
  for i := n downto 2 do
    if (i in [k + 1..n]) then
      result := result * i
    else if(i in [2..n-k]) then
      result := result / i;
end;
ich habs nicht probiert und kann auch gar nicht garantieren, dass der code funktioniert, es is eine (un)überlegte "optimierung" eines montag morgens ;)

dizzy 17. Jan 2005 10:08

Re: n über k - berechnen!?
 
Das mit dem Mengenoperator wird schwierig sobald die Intervallgrenzen ausserhalb von 0..255 liegen. Da solltest du besser mit 2 Vergleichen dran gehen.

Gruss,
Fabian
(der auch nicht die Richtigkeit überprüft hat ^^)

xineohp 17. Jan 2005 13:34

Re: n über k - berechnen!?
 
@Dani: Da hast du Recht ... ich hatte nicht daran gedacht, dass die Gleitkommatypen soviel größer sind, sorry.

ibp 17. Jan 2005 13:44

Re: n über k - berechnen!?
 
desweiteren werfe ich mal das kürzen des quotienten in die runde!

Code:
/5\    1*2*3*4*5      4*5
| | = ------------ = ------
\3/    1*2*3*(1*2)   (1*2)

Wolfgang Mix 14. Jan 2010 15:46

Re: n über k - berechnen!?
 
Ich möchte jetzt 'nen alten Thread wiederbeleben, der für mich unbefriedigend
endete. Die Wahrscheinlichkeit, einen 6er im Lotto zu landen, ist
6 über 49, also ca. 1/14 Mio. Mit meinem Aldi-Taschenrechner für 3,99
löse ich das problemlos. Da bei Int64-Werten bei 21! Schluß ist,
habe ich alle Variablen mit dem Typ Extended rechnen lassen.


Laut Embarcadero ist ...

Zitat:

The range for the Extended type
is between 3.6 x 10^-4951 and 1.1 x 10^4932. The size in bytes of an Extended value is 10.
Mit diesem Code prüfe ich das:

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

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

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:=FloatToStr(nueberk(49,6));
end;
Ergebnis:

6 über 49 ---> 1,18366178998794E-60 //Falsch

49 über 6 ---> 13983816 //Richtig

Da die eine Lösung lediglich der Kehrwert der anderen Lösung ist, wundert mich das.

Frage: Was läuft hier falsch?

Grüß

Wolfgang

jfheins 14. Jan 2010 15:55

Re: n über k - berechnen!?
 
Die Formel gilt nur für n >= k

Die Wahrscheinlichkeit für 6 Richtige (ohne Superzahl) ist also 49 über 6 = 13983816

6 über 49 gibt es nicht / ist nicht definiert oder ist gleich 0. (Je nach Geschmack/Definition)

Btw.: Was für ein Kehrwert? 14 Millionen ist nicht der Kehrwert von 1E-60 - und n mit k zu vertauschen ist kein Kehrwert sondern einfach nicht sinnvoll ;)

Wolfgang Mix 14. Jan 2010 16:10

Re: n über k - berechnen!?
 
@jfheins

Zitat:

Die Wahrscheinlichkeit für 6 Richtige (ohne Superzahl) ist also 49 über 6 = 13983816
Das ist leider nicht richtig!

Die Wahrscheinlichkeit für 6 Richtige (ohne Superzahl) ist 6 über 49 = 1/13983816,

sonst hättest Du ja 13983816 Gewinne pro Spiel, und 6 über 49 gibt es und das ist der
Kehrwert von 49 über 6!

jfheins 14. Jan 2010 16:16

Re: n über k - berechnen!?
 
Okay, die Wahrscheinlichkeit für 6 Richtige ist

1/(49 über 6) = 1/13983816 = 7,151124 * 10^-8

Aber 1/(49 über 6) ist nicht gleich (6 über 49) :!:

patti 14. Jan 2010 16:18

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

Zitat von Wolfgang Mix
und 6 über 49 gibt es und das ist der
Kehrwert von 49 über 6!

Nein! 6 über 49 gibt es einfach nicht. Die Wahrscheinlichkeit eines Lotogewinns ist (49 über 6)^(-1). Siehe dazu auch Wikipedia:

Zitat:

Ist dabei k > n, so ist (n über k) = 0
(Wikipedia-Artikel "Binomialkoeffizient")

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:15 Uhr.
Seite 2 von 7     12 34     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