2个回答
2014-05-19
展开全部
2.45678*4523.65 正确结果是:11113.612847
double f1 = 2.45678*4523.65;
float f2 = 2.45678*4523.65;
则结果
f1 = 11113.612847
f2 = 11113.613281
很明显f2有失真
这是因为float的精度只有7位(不包括指数部分),超过7位就失真了
double f1 = 2.45678*4523.65;
float f2 = 2.45678*4523.65;
则结果
f1 = 11113.612847
f2 = 11113.613281
很明显f2有失真
这是因为float的精度只有7位(不包括指数部分),超过7位就失真了
追问
我想知道它是如何将2.45678和4523.65作为双精度数的?
追答
双精度数占有8个字节,而单精度数只有4个字节
这个体现在具体的运算当中,分别按双/单精度浮点数的标准解析、存储和运算
如果非要看看结果,可以这样:
printf("%d, %d\n", sizeof(2.45678), sizeof(2.45678f));
你会发现同样是2.45678,前者输出8,后者输出4
还有疑问吗,我已经哈欠连天了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询