小问题

Mer.魑魅 2019-08-14 08:18:15
刚学,望各位多多指教 这段是我写的代码(图一) 为什么运算小数的时候会有误差?? 如图二
...全文
111 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
天 月 2019-08-15
  • 打赏
  • 举报
回复
这和浮点数在内存中的表示方法有关,浮点数在内存中以二进制数形式存在。
float数转换二进制遵从的是IEEE R32.24规范,浮点数二进制表现形式是科学计数法方式。
由于精度和算法限制,十进制到二进制转换过程中不能精确转换造成此问题。如:0.6转成二进制位数为1001100110011001100110011.......根本不能精确转换。
你可以做个试验
void main()
{
float a;
printf("XXXXXXXX:");
scanf("%f",&a);

printf("\n %.3f %.4f %.5f %.6f %.7f %.8f %.9f %.10f %.10f\n",a,a,a,a,a,a,a,a);
}
weixin_40290083 2019-08-15
  • 打赏
  • 举报
回复
看看十进制与二进制转换的章节,
Mer.魑魅 2019-08-15
  • 打赏
  • 举报
回复
引用 4 楼 苶道人的回复:
这和浮点数在内存中的表示方法有关,浮点数在内存中以二进制数形式存在。
float数转换二进制遵从的是IEEE R32.24规范,浮点数二进制表现形式是科学计数法方式。
由于精度和算法限制,十进制到二进制转换过程中不能精确转换造成此问题。如:0.6转成二进制位数为1001100110011001100110011.......根本不能精确转换。
你可以做个试验
void main()
{
float a;
printf("XXXXXXXX:");
scanf("%f",&a);

printf("\n %.3f %.4f %.5f %.6f %.7f %.8f %.9f %.10f %.10f\n",a,a,a,a,a,a,a,a);
}
这是测浮点数的精度吗? 学到了,谢谢大佬
csucxy 2019-08-14
  • 打赏
  • 举报
回复
因为内存字节数的限制,并不是所有浮点数(实数)都能完全精确表示。这是常识
Mer.魑魅 2019-08-14
  • 打赏
  • 举报
回复
引用 1 楼 csucxy的回复:
浮点数本来就有精度。
能说具体点吗。。。
csucxy 2019-08-14
  • 打赏
  • 举报
回复
浮点数本来就有精度。

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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