2016/10/18 20:21:43

PHPのint型の上限と注意点

php-logo
目次(クリックするとジャンプします)
  • 1:int型の上限
  • 2:あれ64bitなんだけど…
  • 3:補足・ハマったポイント
  • 3.1:float型は丸め誤差がある
  • 4:まとめ

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型を使う必要がありあそうですよ。

処理系の違いもいろいろ勉強しないといけないですね…。