比如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位有效数子吗!
有效数字位数是小数点以后的数字位数,而电脑输出的数字位数决定于定义变量的模式,并一般采用“四舍五入”的方法。 如 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” .在处理过程中不会当做有效数字位数来处理。有效数字位数还可以通过常量来设定,在此不再赘述。 希望对你有用!
详细请查看IEE754单精度,转换大概规则是从0到31位 最高位表示正负 第30-23位 这8位表示阶码 后22位表示数据。因此你要把他转化为IEEE754格式才能够看出来。能表示的最小精度为2的-23次方,结果是0.00000011920928955078125。但实际上做不到的,数据由于阶码的存在,实际表达精度会下降