
在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位有效数子吗! 展开
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位有效数子吗! 展开
4个回答
展开全部
有效数字位数是小数点以后的数字位数,而电脑输出的数字位数决定于定义变量的模式,并一般采用“四舍五入”的方法。
如
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”
.在处理过程中不会当做有效数字位数来处理。
有效数字位数还可以通过常量来设定,在此不再赘述。
希望对你有用!
如
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”
.在处理过程中不会当做有效数字位数来处理。
有效数字位数还可以通过常量来设定,在此不再赘述。
希望对你有用!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一问,精确位只有7位,7位以后的都是估计位;第二问,一个数与远大于其本身的数相加,相当于没加,结果是大数,大数的显示结果也只保留7位有效数字
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
详细请查看IEE754
单精度,转换大概规则是从0到31位 最高位表示正负 第30-23位 这8位表示阶码 后22位表示数据。因此你要把他转化为IEEE754格式才能够看出来。能表示的最小精度为2的-23次方,结果是0.00000011920928955078125。但实际上做不到的,数据由于阶码的存在,实际表达精度会下降
单精度,转换大概规则是从0到31位 最高位表示正负 第30-23位 这8位表示阶码 后22位表示数据。因此你要把他转化为IEEE754格式才能够看出来。能表示的最小精度为2的-23次方,结果是0.00000011920928955078125。但实际上做不到的,数据由于阶码的存在,实际表达精度会下降
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你用的什么编译器什么环境啊?我在VS2010下的测试结果和你不一样啊。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询