9 Stimmen

Faktoriell von 170+

Jedes Mal, wenn ich versuche, die Fakultät von 171 zu ermitteln, erhalte ich INF. 170 funktioniert gut. Ist es möglich, die Fakultät von 171+ in einem Skript zu ermitteln? Und wie? Meine Funktion:

function factorial($n) {
    if ($n == 0) return 1;
    return $n * factorial($n - 1);
}

10voto

EboMike Punkte 74805

Wenn Sie mit sehr großen Zahlen arbeiten, müssen Sie eine Erweiterung verwenden, die dies ermöglicht.

Es gibt BCMath ( http://www.php.net/manual/en/book.bc.php ), und GMP ( http://www.php.net/manual/en/book.gmp.php ).

4 Stimmen

Die GNU MP-Erweiterung bietet sogar eine gmp_fact() Funktion zur Berechnung von großen Faktorzahlen.

7voto

Crozin Punkte 42878

Sie müssen Folgendes verwenden BC Mathematik o GNU MP Erweiterung. PHP bietet keine Werkzeuge für hochwertige oder hochpräzise Operationen OOTB.

4voto

jon_darkstar Punkte 15748
echo "1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000"

Aber im Grunde ist Ihre Funktion in Ordnung. Ich denke, PHP fehlt diese Art von Präzision. Ich habe den Wert (es ist richtig, btw) in Python

0 Stimmen

Ich brauche nicht die 171er-Faktorzahl, ich brauche das Skript, das das zählen kann :)

0 Stimmen

Öffnen Sie das Terminal. Geben Sie 'python' ein. Geben Sie 'import math' ein. Geben Sie 'math.factorial(171)' ein. Ohne eine Erweiterung, wie sie @Crozin und @EboMike erwähnt haben, können Sie das nicht in PHP machen.

6 Stimmen

Lol, ja. Ein Taschenrechner schlägt tatsächlich eine Suchmaschine in Mathe. Stell dir das mal vor.

3voto

GWW Punkte 41151

Wahrscheinlich erhalten Sie einen Wert, der die maximale Double-Precision-Fließkommazahl auf einem 32-Bit-Rechner überschreitet ( ~10^308 ). 170! faktoriell ist ~7.25741562 × 10^307 die knapp darunter liegt, aber 171! ist größer. Am besten ist es, eine der Bibliotheken zu verwenden, die EboMike oder Crozin in ihren Antworten empfehlen.

2voto

abscondment Punkte 706

Für große n kann man n! sehr schnell und mit geringem Fehler berechnen, wenn man die Stirlingsche Näherung verwendet. Werfen Sie einen Blick auf diesen Beitrag; er enthält eine Analyse der Funktion und einige Beispielcodes:

http://threebrothers.org/brendan/blog/stirlings-approximation-formula-clojure/

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X