PHPにて、浮動小数点数の変換処理の際に無限ループに陥り、サーバーをクラッシュさせるバグが発見された(本家/.、バグ発見者のブログ記事)。 影響するバージョンはPHP5.2および5.3。文字列"2.2250738585072011e-308"(304桁の10進数表記でも同様)からdoubleへの変換を、PHPの32ビットプロセス上で実行した場合にのみ再現されるとのことだ(ニュースリリース)。 このバグは3日に指摘され、4日にはPHP開発チームによりパッチがリリースされている。
唐突ですが, 下記のコードを実行したとき速いのはどちらでしょう. また演算結果はどうなると予想されますか. double calcd(int n) { double ret = 0; for (int i = 1; i < n; i++) { ret += 1 / double(i); } return ret; } float calcf(int n) { float ret = 0; for (int i = 1; i < n; i++) { ret += 1 / float(i); } return ret; } int main() { printf("calcf=%.15f\n", calcf(100000000)); printf("calcd=%.15f\n", calcd(100000000)); } float型は遅い? いえ
■float型は遅い■ この人は、どうもdouble型を嫌っているように思えます。可能な限りfloat型で計算しようとし ているようです。やはり、double型より、float型の方が高速に違いないと思い込んでしまってい るようです。 結論から言うと、ほとんどのCでは、float型よりdouble型で計算した方が数倍高速になります。 例えば、今私がこの原稿を書いているコンピュータ(SPARCstation IPX)で、 r += 0.1 を計算させ ると、rがfloat型だと0.36μ秒ですが、double型だと0.11μ秒になります。 不思議に思われる方も多いと思います。もしあなたがアセンブラを理解できるのでしたら、簡単 な数行のプログラムを組んで、double型とfloat型のときのコンパイルされ方の違いを調べてみる と良いでしょう。 ここでは、アセンブラ・ソースを直接眺めながら説明す
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く