提供されたコードは、数値の階乗を効率的に計算する方法を表し、特に固定小数点の bignumber に合わせて調整され、損失を最小限に抑えて高精度を実現します。この特定の実装では、階乗は、数値の半分の階乗と T2 として示される項の積を含む式を使用して計算されます。提起された問題は、項 T2 の指数 (e) を効果的に計算する方法です。
指数 'e' を計算するには、最初にそれをゼロに初期化します。次に、数値「N」の平方根まで素数を繰り返し、「N」を 1 から「N」で割った範囲内の整数「j」乗した各素数で割った部分を計算します。
たとえば、'p' が素数で、'N' が 36 の場合:
e = (N/p) & 1; // (N/p) が奇数の場合は 1、そうでない場合は 0
j = N/(p^2); // 整数除算
while (j):
e += (N/p^j) & 1; j /= p; // integer division
計算された 'e' は、特定の素数の指数です。
このメソッドは、T2 項の指数を効率的に決定します。精度の問題を回避するために、整数の除算を使用して「N」の素因数を分析します。 「N」を素因数で繰り返し除算し、奇数の結果を合計することで、指数「e」が効果的に得られます。
提供されたコード スニペットは、このプロセスを示しています。
for (e=0,j=N4;j;e+=j&1,j/=p);
概要は次のとおりです。コードが T2 項の指数 'e' を計算する方法:
ループが続くと、指数「e」は、「N」を素因数で除算して得られた奇数の結果の合計を「N」の平方根まで累積します。この値は、T2 項の計算における現在の素因数の指数を表します。
以上が固定小数点ビッグナンバー階乗計算で T2 項の指数 (e) を効率的に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。