scanf输入double型数据出现问题

ChampionLai 2013-03-10 08:48:01
int exp;
double coe;
scanf("%d%lf",&exp,&coe);
coea[i].exp = exp;
coea[i].coe = coe;
比如输入6 0.6
那么coea[i].coe接收到的会是0.5999999..998
请问这怎么解释,精度是如何丢失的?
...全文
596 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
傻傻不解释 2013-03-11
  • 打赏
  • 举报
回复
误差 正常的!!!
赵4老师 2013-03-11
  • 打赏
  • 举报
回复
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10) 同理,用二进制小数也不能精确表示某些10进制小数。
int exp;
double coe;
scanf("%d%lf",&exp,&coe);
coea[i].exp = exp;
coea[i].coe = coe;
printf("%lg,%lg\n",coea[i].exp,coea[i].coe);
ForestDB 2013-03-10
  • 打赏
  • 举报
回复
用二进制只能准确表示0.5,0.125,0.0625⋯⋯这样的小数以及这些小树的和。
意吟 2013-03-10
  • 打赏
  • 举报
回复
就是如此。。。
wahaha_1986 2013-03-10
  • 打赏
  • 举报
回复
同意楼上,计算机表示浮点数是有误差的,原因是你用64位二进制表示一个double类型的数据,并不是每一个数都可以表示出来,也就是说0.6用这64位是刚刚表示不出来的,所以计算机以一个最接近他的数代替。
mujiok2003 2013-03-10
  • 打赏
  • 举报
回复
计算机表示浮点数有误差的,0.5999999..998 和0.6没有区别。
ChampionLai 2013-03-10
  • 打赏
  • 举报
回复

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧