int と double を混在させると、次のプログラムで奇妙な結果が生成されます。
int main()
{
double x = 9.90, y = 10.0, z, w;
int ip, fp;
z = y - x;
ip = (int) z;
w = (z - ip)*100;
printf( "\nx = %f\ty = %f\tz = %f\tw = %f\n",
x, y, z, w );
printf("\nip = %d", ip); /* So far, so good */
fp = (int) w; /* Why does fp get 9 and not 10??? */
printf("\nfp = %d\n", fp);
return 0;
}
結果:
x = 9.900000 y = 10.000000 z = 0.100000 w = 10.000000
ip = 0
fp = 9 (Should be 10!)
結果は、MingGW (WinXP) e Clang (MacOSX) を使用しても同じです。誰かがこの奇妙な振る舞いを説明できますか?