[PHP-users 1391] Re: PHPのint 境界とfloatへの型変換

harikawa php-users@php.gr.jp
Thu, 23 Aug 2001 03:09:02 +0900


針川@茅ヶ崎です。

> PHPの
> $i++ではint境界において型変換が行われず2147483647に+1した内容
> は-2147483648となります。
> $i=$i+1はint境界において型変換が行われfloat型となり2147483647に+1した内
> 容は2147483648となります。

いやー、勉強になりました。

> この動きに違いの理由が判るはいらっしゃいますか?
> 
> PHP単なるバグなんでしょうか?
> それとも$i++はループで多用されるため、出来るだけ早いコードにしようとした
> 結果なのでしょうか?

独断の解釈です。
$i++ はだいたい、$i = 0 から始めるのがほとんどかと思います。
これで c のときに限界までのループを組んで試したことがありますが、20
ビット当たりからおそろしく反応が悪くなって、処理が終わらないので止めた
ことがありました。(半日くらい放っておきました)

まあ、そんなループを組む方が変なのでしょう。

ただ、加算については元の数値、及び加数についてはに予測が付きませんから、
できるだけ誤差やオーバーフローが出ないように心がける、という姿勢には納
得できます。

自動型変換のオーバーヘッドはループ内ではかなり大きいと思います。
ですから単なるインクリメントでは型変換しないというのは自然な事なのでは
ないでしょうか?


(((((((((   Soft-inn  針川英智  )))))))))
))))      http://www.softinn.to/     (((( 
(((         harikawa@softinn.to       )))
))))    Tel:0467-59-1003 Fax:1002    ((((
((((_______ 茅ヶ崎市共恵1-15-1 ______))))