phpで大きい値を計算させたい

phpで扱えるint型の最大値はPHP_INT_MAXで定義されている。
ちなみに、php7.2.0以降ではfloat型の最大値はPHP_FLOAT_MAXで定義されている。

私の環境ではPHP_FLOAT_MAX2147483647だった。
phpに2147483647を3で割った余りを計算させると

echo (2147483647%3); // 1と表示される

これは正しい。

しかし、限界値を超えて2147483648を3で割った余りを計算させると

echo (2147483648%3); //-2と表示される

本来なら2が正解である。

これを回避するためにBC Match関数なるものがあって、これを実行すると

echo (bcmod(2147483648, 3)); //2と表示される

正しい値が得られる。

しかし!残念ながらbcmod関数等が使えないサーバーの場合、phpではどうする事もできない・・(のかな?)
でとりあえず代替案としてMySQLに計算させました。

SELECT (2147483648%3) AS answer;

これで事なきを得ました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です