PHPで巨大過ぎる数をintのまま扱おうとするとPHP_INT_MAX
で定められた値に丸め込まれてしまい正しい計算が行えないため、どうしても演算を行いたい場合は文字列として操作する必要がある。
ちなみにPHPでの最大整数は32bit環境では-2^31から2^31-1
。64bit環境では-2^63から2^63-1
となる。
そんな大きい数字扱う機会ねーよ!
と思っていた時代が僕にもありました。
というのもTwitterに関連するサービスを作っていた際、APIから帰ってくるツイートIDが18桁とかなんですよ。ええ。
皆さんご存知の通りPHP32bitだと扱える整数は10桁、64bitならまぁ19桁まで扱えるんですけれど自分の環境だと入ってない。
ちなみに自分の環境がPHP32bitかPHP64bitかを確認するには、下記コマンドをCLIから実行してみればわかる。
1 |
php -r 'echo PHP_INT_SIZE;' |
4
と表示されれば32bit
8
と表示されれば64bit
である。
で、手っ取り早く文字列のまま足し算、引き算が出来ないものかと調べていたら、下記ブログを発見。
http://ambiesoft.fam.cx/blog/archives/1822
これはマジで便利。
PearのMath_BigIntegerを用いても可能とのこと。
http://pear.php.net/package/Math_BigInteger
試しに中身を見てみたら恐ろしくゴツイライブラリだった件。