訂正:「RubyとPHP(仮) 基本的な違い(2)」 – PHPの整数型の扱い
2008年09月25日(木)09:35|天方
以前に、RubyとPHP(仮) 基本的な違い(2)で RubyとPHPのデータ型を比較しました。
そこで
Rubyでは、Fixnumの範囲を超える値は自動的にBignumに変換されるため、プラットフォームが変わっても、パフォーマンス以外には問題がおこりません。しかし、PHPでは、環境によっては桁が足りないなどの問題が発生する可能性があります。
と説明をしましたが、これだけでは説明が足りておりませんでした。
それは、PHPでもintのサイズ範囲外になった際に、型変換が起こるというものです。 PHPでは、intのサイズを超える場合にはfloat型になります。 たとえば
<?php
$intmax = 2147483647;
$int1 = 1;
$intover = $intmax + $int1;
echo var_dump($intmax);
echo var_dump($int1);
echo var_dump($intover);
?>
のようなコードを実行するとします。
すると、int型とint型を足しても、範囲外の場合にはfloat型になります。
amakata@flatz $ php int.php
int(2147483647)
int(1)
float(2147483648)
したがって、floatの精度までは利用できることになります。 ただ、float型では、有効数字に制約があるのでRubyのように精度が保証されるとは限らないことを注意しておいたほうがよいでしょう。