PHP での大量計算の精度の維持
PHP は、非常に大きな整数の計算を実行するときに精度の問題が発生する可能性があります。これは、フェルマー素数検定などのべき乗剰余演算などの手法を利用する場合に問題になる可能性があります。
浮動小数点の難題
2 つの大きな整数を乗算すると、次のような値が得られる可能性があります。 PHP では自動的に float にキャストされます。これにより、以下に示すように、不正確な係数計算が行われる可能性があります。
$x = 62574 * 62574; var_dump($x); // float(3915505476) ... correct var_dump($x % 104659); // int(-72945) ... incorrect
解決策
PHP は、大きな数値を処理するための 2 つの外部ライブラリ、BC Math と GMP を提供します。 GMP は、より包括的な API を提供し、非常に大きな値であっても精度を保証します。
GMP の使用
GMP は、任意精度の数値を表すために使用できます。提供された回答に見られるように、Decimal2 のようなカスタム クラスを作成して、大きな数値の計算を容易にし、丸めや係数の計算などの機能を提供できます。
// Using the GMP library $bignum = gmp_init('62574'); // Initialize GMP number $product = gmp_mul($bignum, $bignum); // Multiply using GMP $modulus = gmp_mod($product, 104659); // Calculate modulus using GMP echo gmp_strval($modulus); // Output the correct modulus value
このメソッドは、必要な条件で大きな数値の計算と処理を保証します。精度が低下する可能性はありません。
以上が非常に大きな整数を計算する場合、PHP はどのようにして精度を維持できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。