关于一个小C语言程序,结果弄不明白,求分析,谢谢!

mai(){floatx,y;x=1.23456789e10;y=x+10printf("x=%f\ny=%f",x,y);}为什么结果是:x=12345678848.0... mai()
{
float x,y;
x=1.23456789e10;
y=x+10
printf("x=%f\ny=%f",x,y);
}
为什么结果是:x=12345678848.000000
y=12345678848.000000
不明白这个848从哪来
展开
 我来答
FinleyLee
2012-02-20
知道答主
回答量:19
采纳率:0%
帮助的人:6.7万
展开全部
我也是初学的,你应该写错了。源代码为
#include<stdio.h>
main()
{
float x,y;
x=1.23456789e10;
y=x+10;
printf("x=%f\ny=%f\n",x,y);
return 0;
}
结果为x=12345678848
y=12345678858
出错的原因是float型只精确到小数点后6位,所以,你开始的x=1.23456789E10,计算机只能精确到“7”,后面的是系统随机上的,故出来了8848,有加上10 ,y就是12345678858了
百度网友28b4182
2012-02-20 · TA获得超过7222个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1816万
展开全部
根据我的计算vc
float的范围
是使用26位尾数,6位指数
26位尾数中
有一个符号位
也就是最大的数是+/-(2^25-1)*(+/-2^5-1)
你这个的结果已经超过了这个范围了.所以后面的不精确了,而且浮点数本来就不精确的.不像整数那样,说是几就是几的
比如3在浮点数是可能是2.99999999,这个样子的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-02-20
展开全部
结果溢出,所以出错
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式