Entwickler-Ecke

Sonstiges (Delphi) - Ein bisschen Mathematik


Psycho - Do 12.12.02 22:02
Titel: Ein bisschen Mathematik
Ein bischen Mathematik:

Ich möchte Wahrscheinlichkeiten berechnen. Dafür benötige ich Fakultät oder Binomialkoeffizienten.

Bei eigener Programmierung sprengt fakultät(150) sämtliche Zahlbereiche.

Gibt es entsprechede Funktionen? Ich kann sie auch in MATH nicht finden.

Vielen Dank


BungeeBug - Do 12.12.02 23:24

ich kann die zwar nicht ganz klar was sagen aber ich denk [url]http://www.google.de[/url] kann dir helfen ... :P
MfG BungeeBug


Christian S. - Do 12.12.02 23:43

Das sprengt nicht nur bei eigener Programmierung jegliche der von Delphi standardmäßig zur Verfügung gestellten Zahlenbereiche. Sie Dir die Zahl mal an:

5713383956445854590478932865261054003189553578601126418254837
5833179829124845398393126574488675311145377107878746854204162
6662501986845044663559491959220665749425920957357789293253572
9044496247240541679072211844543712226967552000000000000000000
0000000000000000000

Also im Bereich von 10^262.

Eine solche Zahl kannst Du nur mit Datentypen bearbeiten, die für solche Giganten entwprfen wurden. Ich hatte mal einen Datentypen BigInteger, ich weiß aber nicht mehr woher. Man findet sowas aber ziemlich schnell.

MfG,
Peter


Christian S. - Do 12.12.02 23:49

Habs doch noch gefunden:

http://www.delphiforfun.org/Programs/Delphi_Techniques/big_integers.htm


Psycho - Do 12.12.02 23:55

Vielen Dank,

Ich werde den Artikel morgen einmal genau durcharbeiten.

Jeder Taschenrechner hat die Funtionen und berechnet die Werte vermutlich über irgendeine Reihe oder rekursiv. An so etwas hatte ich gedacht bzw. gehofft.

Also 10 Bit auf die Dankebank
Psycho


Christian S. - Fr 13.12.02 15:09

Dein TR berechnet Dir 150! ? Da hätte ich dann aber gerne mal die Modellnummer, der kann dann bestimmt auch einiges an Nachkommastellen speichern, und das könnte ich ab und zu mal gebrauchen.


Psycho - Fr 13.12.02 15:36

Hallo Peter, das ist lustig oder so!

Nein, mein Taschenrechner berechnet nit 150 ! aber den Binomialkoeffizienten "n über k" auch für große Werte.

Da n über k = n! / (k!*n-k)! ist, brauche ich die Fakultäten oder eine Reihe, die den Binomialkoeffizienten ohne Fakultäts-zwischenwerte berechnet. alles klar?

Gruss Psycho


DaFox - Fr 13.12.02 15:57

Hi!

Gibt es nicht gerade aus diesem Grund (große n) die Annäherung durch die Poisson-Verteilung?

Gruß,
Markus


Psycho - Fr 13.12.02 16:02

Stimmt, aber ich möchte eine (graphische) Simmulation zur Verteilungsfunktion für wachsende n entwerfen, mehr den Weg entwickeln, als die Endverteilung.

Ich bin auch schon ein Stückchen weiter, weil ich bei der Berechnung des Binomialkoeffizienten auf die Fakultät verzichtet habe.

Gruss Psycho


Christian S. - Fr 13.12.02 16:11

n über k kann aber auch geschrieben werden als:

[n*(n-1)*(n-2)*...*(n-k+1)]/[1*2*3*...*k]

Jetzt ist es ungünstig, erst den Zähler und dann den Nenner auszurechnen. Ich würde es so machen, dass Du zuerst n/k berechnest, dann mit (n-1) / (k-1) multiplizierst usw.


Das sieht dann also so aus:

[n/k]*[(n-1)/(k-1)]*[(n-2)/(k-2)]*...*[(n-k+1)/1]

Jede der Zahlen dürfte relativ klein sein und den Rechner nicht überfordern.

MfG,
Peter


Psycho - Fr 13.12.02 16:23

Hallo!

Nur zur Information: 100 000 über 1760 = 3,15051789454682 E 3843

Bisheriger persönlicher Rekord unter Delphi

Gruss Psycho


Psycho - Fr 13.12.02 16:26

Hallo Peter, ich glaube, da ist ein Fehler in Deiner Rechnung:

der Nenner lautet: 1*2*...* (n-k)

Gruss Psycho


Christian S. - Fr 13.12.02 16:50

Erstmal prinzipiell: ich mache keine Fehler :wink:

Und speziell hier: Ich habe die ausgeschriebenen Zähler und Nenner aus meiner Formelsammlung abgeschrieben. Und wenn Du Dir die Formel, die Du gepostet hast (die mit den Fakultäten) anschaust, und die Zahlen, die in n! drin sind und die, die in dem (n-k)! drin sind kürzt, wirst Du sehen, dass genau das stehen bleibt, was ich gepostet habe.

MfG,
Peter


Psycho - Fr 13.12.02 16:55

Hast Recht!

Ich habe den anderen Faktor ( k! ) gekürzt. Dann sieht es anders aus, ist aber das gleiche

Gruss Psycho

-10 Bit für dumme Bemerkung *schäm*