int型の上限
PHPのint型の上限はPHP_INT_MAX
で確認することが可能です。
var_dump(PHP_INT_MAX);
この時64bitシステムなら以下の様に表示されるかと思います。
int(9223372036854775807)
桁が大きいですね~。922京3372兆0368億5477万5807が上限ということみたいですね。
PHPは符号無し整数をサポートしていないので、これが上限値になるかと思います。
32bitの場合、PHP_INT_MAX
は以下のようになっています。
int(2147483647)
21億4748万3647ですね。64bitと比べると随分小さく感じますね。
あれ64bitなんだけど…
ここにちょっとした落とし穴が…。
しかし PHP 7 より前のバージョンにおける Windows は例外で、Windows で PHP7より前のバージョンを使う場合はは常に 32 ビットとなります。
整数
http://php.net/manual/ja/language.types.integer.php
なんだって~??
windowsでは64bitでもPHP5.6だとint型が32bit扱いになってしまうんですね。int
型で扱える最大値がかなり制限されてしまうようです。
なんでwindowsだとダメなんでしょうね。
PHP7を使えばwindowsでも64bit上限としてint
型がつかえるようですので、大きな数値を扱うようならPHP7以上を使うのがいいのかもしれません。
なんという落とし穴。
補足・ハマったポイント
float型は丸め誤差がある
PHPにはint
より大きな数値を扱えるfloat
型がありますが。
float
型では1.8e308
が上限値で扱えます。すんごい大きな数字を扱えますが、こちらは丸め誤差が発生します。
2進数で0.1が正確に表すことができないのは有名な話かと思いますが、PHPでも例外ではありません。その他にも丸め誤差が発生してしまう場合が多く存在します。
float
型での計算が立て込んでくると予期しない数値になったりしてとても厄介です。float
型で大きな数値を扱うのはint
型で数値を扱う場合と比べて難度が高い様に思えます。
まとめ
きっちり整数を扱いたいならやっぱりint
型を使う必要がありあそうですよ。
処理系の違いもいろいろ勉強しないといけないですね…。