关于浮点数有效数字我有很多疑惑,我发现我读入一个浮点数后再输出,两个数字是不相等的。开始我以为是我输入的数字超过了float有效数字位数的原因,但是下面这个程序证明不是这个原因:
#include <stdio.h>
#include <float.h>
int main(void)
{float test;
char data[7];
printf("Float has at least %d effective numbers\n", FLT_DIG);
printf("Then i'm gonna check it!\n");
printf("test data:_______\b\b\b\b\b\b\b");
scanf("%f",&test);
printf("please input again to confirm it:_______\b\b\b\b\b\b\b");
scanf("%s",&data);
printf("So %f is supposed to be %s", test, data);
return 0;
}
就是先查了一下我的机子规定float至少几个有效数字,然后输入一个数字,输两边,一次存成float,一次存成字符串,最后检验float是不是真有这么多有效数字
结果:
float数据 机器内是2进制数,
1位符号位
8位指数位
23位“尾数”位
共32 位 2进制数。
平时讲 有效数字 是6~7位 ,指10进制。
通常程序输入的数是10进制,进入机器后要化成2进制,计算完又转十进制输出。
10进制到2进制,2进制到10进制 转换,有的数化不净,有的数化得净。
如同10进制分数化10进制小数,有的化得净(例如 4分之1,变0.25),有的化不净(例如 3分之1,变0.33333....)。
10进制到2进制,2进制到10进制 转换,化得净的效数字7位,化不净的效数字6位,因为最后一位有舍入误差。
例如:
float x,y;
x=0.51; // 化不净
y=0.5; // 化得净
printf("x=%.8f y=%.8",x,y); // 输出 0.50999999 0.50000000
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。