この記事で共有する内容は、PHP における長整数の演算に関するもので、必要な場合は参考にしてください。
PHP には、int の 2 種類の数値しかありません。と float のビット数はシステムに依存し、uint がないため、他のシステムと通信する場合には多くの不便があります。 int がオーバーフローした場合、科学表記法で表現された float に自動的に変換され、小数点以下 15 桁のみが保持されます。後続のデータは四捨五入され、その後のデータ操作に影響を与えます。たとえば、基底変換や演算などについて話すと、すべてがうまくいきません。 PHP の場合:
int : min~max: -9223372036854775808 ~ 9223372036854775807 (~920 億) float : min~max: -1.79769 31348623E+308 ~ 1.7976931348623E+308 (~1.8 E308)
現時点では、関連する処理に文字列形式の使用を検討する必要があります。数学的な計算を実行する必要がある場合は、BC Math (任意精度数学) 関数を使用する必要があります
。それは自分で確認できます。 PHP マニュアル: http://php.net/manual/zh/function.bcmod.php これは、長整数をバイナリに変換する簡単な例です。Convert 2^128 to binary : PHPの基本変換関数にも最大値制限があるため、ここではshort除算を使用してバイナリに変換し、べき乗を求めるには独自の関数powを使用します
出力結果は以下の通り、明らかに精度が足りず、バイナリが間違っています
正しい表現:
出力結果:
関連する推奨事項: PHP の PDO データ アクセス抽象化レイヤーに関連する操作
以上がPHP における長整数演算の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。