我的代码:
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
?
最佳答案
pow(2,63) - 1
都是用 double 浮点运算完成的。特别是,-1
被转换为 -1.0
,这太小了,无关紧要
关于c++ - 在 C++ 中混淆 "double to long long",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249975/