2010-11-22 7 views
6

jedes Mal, wenn ich versuche, die Fakultät von 171 zu bekommen, bekomme ich INF. 170 funktioniert gut. Ist es möglich, den Faktor 171+ in einem Skript zu erhalten? Wie? Meine Funktion:Faktor von 170+

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

Antwort

5

Sie müssen BC Math oder GNU MP Erweiterung verwenden. PHP bietet keine Werkzeuge für Hoch-Werte oder hochpräzise Operationen OOTB.

3
echo "1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000" 

wirklich aber 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

ich nicht die 171 Fakultäts brauche, ich brauche das Skript, das das :) – Tom

+0

eröffnen Terminal zählen konnte. type 'python' type 'import math' type 'math.factorial (171)'. Sie können es nicht in PHP ohne eine Erweiterung wie @Crozin und @EboMike erwähnt –

+0

Selbst Google wird nicht tun, 171, stoppt es bei 170. – DampeS8N

1

Es ist eine größere Anzahl, als Sie mit 32-Bit halten können. Wenn Sie denselben Code auf einem 64-Bit-Computer ausführen, sollte es funktionieren.

+0

Nicht gerade eine sehr portable Lösung. – EboMike

+0

Nein, aber abhängig davon, wo der Code ausgeführt werden muss, ist er möglicherweise am einfachsten. – thelem

+0

Ein 64-Bit-Computer hat auch eine Grenze: D ... Es wäre nur 2^21 mal größer: P –

3

Sie erhalten wahrscheinlich einen Wert, der die maximale doppelte Genauigkeit in einem 32-Bit-Gerät (~10^308) überschreitet. 170! Fakultativ ist ~7.25741562 × 10^307 das ist knapp unter, aber 171! ist größer. Am besten nutzen Sie eine der Bibliotheken, die EboMike oder Crozin in ihren Antworten empfehlen.