初学C……求助float有效数字的问题

关于浮点数有效数字我有很多疑惑,我发现我读入一个浮点数后再输出,两个数字是不相等的。开始我以为是我输入的数字超过了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是不是真有这么多有效数字
结果:
图片说明

这是怎么回事啊……我大概知道为什么会有这种情况,就是计算机把十进制转二进制存储再转十进制的过程出了问题……可是明明是机器告诉我有至少六位有效数字,那我输个六位有效数字的数不应该会出错的吧?

不知道哪位朋友能给我解答一下……是程序写错了吗?还是说有效数字的问题我理解错了?怎么样能让数值准确的输出呢?按照这种情况,岂不是大部分的运算的都是不准确的?

查看全部
u010909964
Hazekiah
2015/08/29 14:32
  • angular.js
  • c
  • 二进制
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

5个回复