0

関数が階乗を使用して手動で計算される可能性があることは承知しています。問題は、より大きな数値が適切に計算されないことです。

たとえばCOMBIN(1500,5)、MS Excel に入力すると、本来どおりに返さ62,860,358,437,800れます。しかし、手動で計算しようとすると、Excel でも#NUM!最初に 1500 の階乗を見つけようとするとエラーが発生します。手動式は次のようになります。

1500!/5!(1500-5)!

Excel の COMBIN 関数が適切に計算するのに、手動の方法でエラーが返されるのは興味深いことです。要するに、PHP にこの関数に相当するものがあるかどうか疑問に思っていますか? gmp_fact を使用して手動で計算しようとしましたが、Excel と同様にエラー ( NaN) が返されます。

ありがとう

4

1 に答える 1

0

データ型がすぐにオーバーフローしているため、計算が失敗しています。Integerこれは、おそらくシステムでは 32 ビットにすぎません。この問題を回避するには、任意精度の数学関数を使用できます。

http://www.php.net/manual/en/ref.gmp.php

エラーまたは悪い結果を返しているように見える場合gmp_fact(...)は、おそらく悪い値を渡しているか、結果が基本的な数値型であると想定しています。gmp_strval計算の実行が完了したら、返された GMP リソースを読み取り可能なものに変換するようなものを使用する必要があります。

例:

$a = gmp_fact(1500);
$b = gmp_fact(5);
$c = gmp_fact(1500-5);
$result = gmp_div($a,(gmp_mul($b,$c)));
echo gmp_strval($result);
于 2013-07-25T21:42:52.363 に答える