私のコード:
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
?