OK、pow 関数とその結果を int にキャストすることについて多くの質問があったことは知っていますが、この少し具体的な質問に対する答えが見つかりませんでした。
OK、これはCコードです:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i = 5;
int j = 2;
double d1 = pow(i,j);
double d2 = pow(5,2);
int i1 = (int)d1;
int i2 = (int)d2;
int i3 = (int)pow(i,j);
int i4 = (int)pow(5,2);
printf("%d %d %d %d",i1,i2,i3,i4);
return 0;
}
これが出力です: "25 25 24 25". pow への引数がリテラルでない 3 番目のケースでのみ、おそらく丸め誤差が原因で間違った結果になることに注意してください。明示的なキャストがなくても同じことが起こります。この4つのケースで何が起こるか誰か説明できますか?
Windows 7 で CodeBlocks を使用し、それに付属の MinGW gcc コンパイラを使用しています。