私のコード:
int main()
{
long long a = pow(2,63) - 1;
long long b = pow(2,63);
double c = pow(2,63) - 1;
double d = pow(2,63);
printf("%lld %lld \n%f %f \n%lld %lld\n", a, b, c, d, (long long)c, (long long)d);
return 0;
}
実行結果は次のとおりです (win7 x64 で gcc を使用したコードブロック):
9223372036854775807 9223372036854775807
9223372036854775800.000000 9223372036854775800.000000
-9223372036854775808 -9223372036854775808
質問:
なぜa == bですか?
c == dの精度のためにそれを知っていdoubleます。
しかし、なぜそう(long long)cで(long long)dはないの9223372036854775800ですか?
そしてなぜ(long long)c != a そして(long long)d != b?