Fakultät bis unendlich

  • Hallo Leute,
    ich hatte Langeweile und habe mal eben ein Skript entwickelt, welches die Fakultät ausrechnet, bis ihr keine Lust mehr habt so lange zu warten oder der String der erstellt wird zu groß wird ^^

    Meine Methode ist, die Zahlen als Strings zu behandeln und schriftliches Multiplizieren als auch schriftliches Addieren zu machen, damit mit den Strings gerechnet werden kann. Das funktioniert, dauert aber (weil es Autoit ist) ziemlich. Calc kann ohne Exponent nur die Fakultät bis 29 anzeigen, aber hiermit gibt es keine Grenzen.
    Den versuch die Fakultät von 1000 auszurechnen hab ich abgebrochen, weil es zu lange braucht. Die 100 klappt bei mir in ca. 400ms und die 105 braucht schon 1200ms.

    Ich weiß natürlich nicht ob es richtige Ergebnisse sind, weil ich mit calc nur bis zur 29 testen konnte ^^

    Vielleicht hilft es euch ja irgendwie, ansonsten viel Spaß damit ^^
    Mfg TheShadowAE

    PS:
    ich hab auch erstmal nicht versucht das schnell zu machen ^^

  • Den versuch die Fakultät von 1000 auszurechnen hab ich abgebrochen, weil es zu lange braucht.

    Ich weiß ist bisschen sch... jetzt da gleich mit etwas anzukommen was anders und schneller ist. Aber halt mal als Alternative:
    Mit der >>BigNum-UDF<< und folgender Funktion braucht mein Rechner für die Fakultät 1000 knapp 2,5s:

    Spoiler anzeigen
    [autoit]

    Func _BigNumFak(Const $iN)
    Local Static $nOld = 0, $fOld = 1
    Local $df = 1, $iS = 2
    If ($nOld < $iN) And ($nOld > 2) Then
    $iS = $nOld + 1
    $df = $fOld
    EndIf
    For $i = $iS To $iN
    $df = _BigNum_Mul($df, $i)
    Next
    $nOld = $iN
    $fOld = $df
    Return $df
    EndFunc

    [/autoit]

    Die Funktion könnte man natürlich noch auf die Multiplikationsschleife kürzen aber sie ist auf inkrementierende Mehrfachaufrufe ausgelegt (war mal wichtig für die Berechnung der eulerschen Zahl) - daher der Teil davor.

    Aber ich denke mal du wolltest ganz bewusst auf die BigNum.au3 verzichten - oder?

  • Ist schon gut, ich wusste von der BigNum-UDF, aber ich wollte das selber lösen (richtig geraten, ich wollte sie nicht benutzen ^^) und hab den ersten Einfall mal programmiert, das auch nicht möglichst schnell. Die BigNum scheint auch ohne Addieren auszukommen (da sie glaub ich kein schriftliches Multiplizieren benutzt), ich werde mir das mal genauer angucken und dann noch schneller programmieren ^^
    Vielen Dank für die Info, dass BigNum auch eine Fakultät hat und den Link :)

    EDIT: Die Fakultät ist ja garnicht in der BigNum ^^

    3 Mal editiert, zuletzt von TheShadowAE (9. September 2011 um 14:37)