2010-11-22 9 views
6

私は171の階乗を取得しようとするたびに、INFを取得します。 170はうまく動作します。スクリプトで171 +の階乗を得ることは可能ですか?どうやって? My機能:Factorial of 170+

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

答えて

5

BC MathまたはGNU MP拡張子を使用する必要があります。 PHPは、高価値オペレーションや高精度オペレーションのためのツールを提供していません。

3
echo "1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000" 

は、しかし、あなたの関数で結構です。私はPHPにはそのような精度がないと思う。私はpythonで値(正しいbtw)を持っています

+0

私は171階乗を必要としない、私は:) – Tom

+0

は、端末を開くことを数えることができるスクリプトを、必要とします。 'python'とタイプして 'import math'と入力してください。 'math.factorial(171)'と入力してください。 @Crozinや@EboMikeのような拡張子を使わずにPHPで行うことはできません –

+0

Googleでは171をやめ、170で終了します。 – DampeS8N

1

これは、32ビットを使用して保持できるよりも大きい数値です。 64ビットコンピュータで同じコードを実行すると、動作するはずです。

+0

非常に移植性の高いソリューションではありません。 – EboMike

+0

いいえ、コードを実行する必要がある場所によっては、実際には最も簡単なものです。 – thelem

+0

64ビットコンピュータにも制限があります:D ... 2倍の21倍です:P –

3

32ビットマシン(~10^308)で倍精度浮動小数点数の最大値を超える可能性があります。 170!階乗は~7.25741562 × 10^307ですが、その直下ですが、171!より大きい。あなたの最良の賭けは、EboMikeのライブラリかCrozinの答えの中の1つを使うことです。