首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于double型计算结果的疑义?

2013-04-20 
关于double型计算结果的疑问??double d512*512*200*4096coutdendl结果为:0(错误)double d(double)

关于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

热点排行