在c语言中,单精度有效数字和有效数位

比如floata=1111111.111;floatb=7777777.777;floatc;c=a+b;printf("c=%f",c);为什么c=88888888.2... 比如float a=1111111.111;
float b=7777777.777;
float c;
c=a+b;
printf("c=%f",c);
为什么c=88888888.236 为什么有8位?
float a,b;
a=123456.789e5;
b=a+20;
printf("%f",b);
为什么等于12345678848.000000 不是说有效数字是7位,那应该是1234567后面数字随机,为什么都是8位有效?
1楼2楼都是答非所问呢~我想问的是为什么前面8位的数没变~不是说只有7位有效数子吗!
展开
 我来答
fxafh45
2011-02-16 · TA获得超过298个赞
知道答主
回答量:202
采纳率:100%
帮助的人:55.3万
展开全部
有效数字位数是小数点以后的数字位数,而电脑输出的数字位数决定于定义变量的模式,并一般采用“四舍五入”的方法。

int i;

printf("Enter a value for i...\n");
scanf("%d", &i);

键盘输入0.333,储存到变量i里的数是0(约掉了)
如果改成:
double i;

那就会储存0.333000
在输出数值的时候可以先设定有效数值位数:
double i;

printf("Enter a value for i...\n");
scanf("%d", &i);

printf("\ni = %.4lf", i);
在输出的时候在电脑上会输出“i = 0.3330”

.在处理过程中不会当做有效数字位数来处理。

有效数字位数还可以通过常量来设定,在此不再赘述。
希望对你有用!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
烦识了E
2011-02-16
知道答主
回答量:52
采纳率:0%
帮助的人:25.4万
展开全部
第一问,精确位只有7位,7位以后的都是估计位;第二问,一个数与远大于其本身的数相加,相当于没加,结果是大数,大数的显示结果也只保留7位有效数字
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迎风摇摆的树叶
2011-02-16 · TA获得超过786个赞
知道小有建树答主
回答量:400
采纳率:50%
帮助的人:256万
展开全部
详细请查看IEE754
单精度,转换大概规则是从0到31位 最高位表示正负 第30-23位 这8位表示阶码 后22位表示数据。因此你要把他转化为IEEE754格式才能够看出来。能表示的最小精度为2的-23次方,结果是0.00000011920928955078125。但实际上做不到的,数据由于阶码的存在,实际表达精度会下降
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ronew7164
2011-02-16 · TA获得超过257个赞
知道小有建树答主
回答量:238
采纳率:0%
帮助的人:159万
展开全部
你用的什么编译器什么环境啊?我在VS2010下的测试结果和你不一样啊。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式