![]() |
Auch größere Fakultäten ausrechnen?
Hi, ich bin gerade dabei, ein Programm zu schreiben, in dem ich die Fakultät von x ausrechnen will..
Hierfür verwende ich den Code, den ich hier gefunden habe.
Delphi-Quellcode:
Das Problem ist jetzt aber, dass das Ergebnis nur bis 20 richtig "erscheint", da bei 21 schon eine negative Zahl als Lösung rauskommt. Gibt es eine Möglichkeit dies weniger Speicherintensiv(muss aber rekusiv sein) zu lösen, damit man auch über die 20 hinaus kommt?
function NFak(Val: Integer): Int64;
begin if Val < 0 then raise Exception.Create('Val muss größer/gleich 0 sein.'); Result := 1; repeat Result := Result * Val; Dec(Val); until Val <= 1; end; |
Re: Auch größere Fakultäten ausrechnen?
Komisch 34 (z.B.) geht wieder, ich kann auch keinen Fehler erkennen. Probiers mal mit
Delphi-Quellcode:
Was ist an deinem Code bitte rekursiv???
function NFak(Val: Integer): Int64;
var i:Integer; begin if Val < 0 then raise Exception.Create('Val muss größer/gleich 0 sein.'); Result := 1; for i:= Val downto 1 do Result := Result * i; end; Ratte |
Re: Auch größere Fakultäten ausrechnen?
oh, stimmt, da is wohl was schiefgeaufen, dann muss ich den mal kurz umschreiben und dann nochmal probieren^^ :pale: :wall:
|
Re: Auch größere Fakultäten ausrechnen?
Solly,
was machst du, falls der Int64 zu klein wird (ist zwar groß, aber die Möglichkeit besteht ja). Ich habes so gelöst, dass ich eine Array mit Integer gemacht habe, wobei jeder Arrayeintrag eine spätere Zahl darstellt. Man muss dann nurnoch den Array immer wieder durchgehen und falls eine Zahl des Array > 10 ist diese in dem nächsten Eintrag des Array übertragen (wie beim schrieftlichen Rechnen auch) |
Re: Auch größere Fakultäten ausrechnen?
Das hatte ich gerade letztens erst. Ich habe das mit der Mathe-Unit von Hagen gelöst, da man hier mit sehr grossen Zahlen rechnen kann. Sucht mal hier nach DecMath.
|
Re: Auch größere Fakultäten ausrechnen?
@Phonix: und in dieser Version gibt es sogar eine spezielle Unit in Sourcen mit Namen "NComp.pas". Sie enthält insgesamt 7 verschiedene mathematische Verfahren um die Fakultät auszurechnen. Darunter auch den schnellsten Algorithmus, nach A. Schönhage. Natürlich gibts in den Sourcen auch noch weitere Funktionen der Kombinatorik.
Es ist also mit dieser DEC Version garnicht nötig eine eigene Factorial() Function zu programmieren, denn sie enthält schon alle bekannten Verfahren. Heute abend werde ich hier mal eine kleine EXE reinstellen. Gruß Hagen |
Re: Auch größere Fakultäten ausrechnen?
Liste der Anhänge anzeigen (Anzahl: 2)
Hi
hier die Anwendung zur Berechnung der Faktultät mit hilfe der verschiedenen Algorithmen. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz