Autor Beitrag
eisi_eis
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Di 25.04.06 23:42 
hallo leute, ich habe ein problem mit der berechnung der fakultät von großen zahlen. ich hab da ein kleines programm zur permutation und stelle fest das longint nicht ausreicht um die zahlen zu fassen...
also zum beispiel 49! kann delphi nich mehr fassen. gibts da ne möglichkeit?
danke schonmal im voraus...

der eisi_eis
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 26.04.06 03:41 
nimm statt LongInt (?) Int64 oder Extended

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 26.04.06 07:11 
Na ja, dann ist aber auch irgendwann Schluss. Und Extended hat ja auch nur eine begrenzte Stellenanzahl. Es gibt aber Units, die mit beliebig großen Zahlen umgehen können.

_________________
Na denn, dann. Bis dann, denn.
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 26.04.06 07:27 
Möchtest du die Fakultäten selbst ausrechnen, oder brauchst du diese nur einer Formel als Zwischenergebnis?
Evtl. kann man die Berechnung so anpassen, das nicht so riesige Zwischenergebnisse rauskommen.

_________________
We are, we were and will not be.
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Mi 26.04.06 07:35 
Hallo,

n!= 1*2*3*..*n
logarithmiert
log(n!)=log(1)+log(2)+log(3)+...+log(n) sieht schon viel freundlicher aus
natuerlich kann man diese Zahl nicht mehr zurueckverwandeln, denn sie bleibt ja zu gross , aber Exponent(vor dem Komma) und Mantisse kann man getrennt bestimmen(eventuell /log(10) teilen um im Dezimalsystem zu landen).
Fuer eilige Rechnungen gibt es die Stirlingformel;
n! ~ (n/e)^n *sqrt(2*pi*n) (je groesser n desto genauer)

Fuer Binomialkoeffizienten geht auch [url=www.softgames.de/for...?t=116793]dies[/url]
Gruss Horst
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Mi 26.04.06 08:41 
user profile iconalzaimar hat folgendes geschrieben:
Na ja, dann ist aber auch irgendwann Schluss. Und Extended hat ja auch nur eine begrenzte Stellenanzahl. Es gibt aber Units, die mit beliebig großen Zahlen umgehen können.


Sicher, aber Extended geht bis 1.1*10^4932, die Zahl kann sich doch eh keiner mehr vorstellen, und nur damit mit man xxxx! noch berechnen und anzeigen kann :?: :roll:

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
eisi_eis Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 26.04.06 20:17 
wie bau ich extended direkt ein? kann ich das einfach mit integer austauschen?
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Do 27.04.06 06:19 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function FakultaetAsReal (const AN: Integer): Extended;
begin
  try
    Result := 1;
    if AN>1 then
      for I := 2 to An do Result := Result*I;
  except
    Result := 0;
  end;
end;

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!