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

比如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位有效数子吗!
最新回答
╰→丫丫

2024-10-14 09:27:23

有效数字位数是小数点以后的数字位数,而电脑输出的数字位数决定于定义变量的模式,并一般采用“四舍五入”的方法。

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”

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

有效数字位数还可以通过常量来设定,在此不再赘述。
希望对你有用!
再穿一次短袖我们就毕业了

2024-10-14 09:21:18

第一问,精确位只有7位,7位以后的都是估计位;第二问,一个数与远大于其本身的数相加,相当于没加,结果是大数,大数的显示结果也只保留7位有效数字
话青梅

2024-10-14 09:32:14

详细请查看IEE754
单精度,转换大概规则是从0到31位 最高位表示正负 第30-23位 这8位表示阶码 后22位表示数据。因此你要把他转化为IEEE754格式才能够看出来。能表示的最小精度为2的-23次方,结果是0.00000011920928955078125。但实际上做不到的,数据由于阶码的存在,实际表达精度会下降
时光暖心

2024-10-14 08:01:50

你用的什么编译器什么环境啊?我在VS2010下的测试结果和你不一样啊。