关于double型计算结果的疑问??
double d=512*512*200*4096;
cout<<d<<endl;
结果为:0 (错误)
double d=(double)(512)*(double)(512)*(double)(200)*(double)(4096);
cout<<d<<endl;
结果为:214748364800.000000 (正确)
这是为什么啊?????????? double输出 C语言
[解决办法]
512*512*200*4096 这样直接算,它的结果是用整型来保存的,最后才转成double
而214748364800对于一个整型来说已经溢出了,就是超过了它的表示范围。
[解决办法]
double的范围比int大得多。。。
第一种情况里的整数相乘的结果已经超出了int的范围。。。
[解决办法]
double d=512*512*200*4096;
cout<<d<<endl;
结果为:0 (错误)
512*512*200*4096 = 0x 32 0000 0000
在32bit的机器中,已经溢出,会截断的。
变成了:
double d = 0;
[解决办法]
double d=512*512*200*4096;
按 int 计算,赋值时才转换成 double