2005年11月29日

こんなプログラムはいやだ: float++

次の C言語のプログラムをコンパイルして実行するとどうなるでしょうか。

int
main ()
{
    volatile float i;
    for (i = 0; i < 100000000; ++i);
    return 0;
}
 

おそらく、多くのプラットフォームでは、無限ループになると思います。これは、IEEE754 の単精度浮動小数点の有効桁数が24ビットであり、224 を超えると数値に誤差が入るためです。volatile を指定しているのはコンパイラの最適化により i がレジスタに入るのを避けるためです。

上のプログラムは、なんとなく float の挙動が気になったため書いたものですが、パズル的な要素もあるかと思い、紹介してみました。身近なプログラマをいやがらせるのに使えるかもしれません。