这两个结果为什么会不一样

lllluoyj 2019-12-30 07:50:05
...全文
45 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2019-12-30
  • 打赏
  • 举报
回复
%f的输出,是带有进位的特性的。 3.3333325*3 = 9.9999975 = 10
而后面那个是9.99999905没有进位

%f输出,输出10不代表那个数就真的是10, 它依然是9.9999975,只是四舍五入显示成10了而已
lllluoyj 2019-12-30
  • 打赏
  • 举报
回复
引用 2 楼 寻开心的回复:
精度问题,c那里你多放一个小数点后的3就对了
float a,b,c,d;
a = 10.0 /3 ;
printf("%.8f\n", a);
d = 3.333333;
printf("%.8f\n", d);
printf("%8f %.8f\n", a*3, d*3);

输出结果:
3.33333325 // 这个是10/3
3.33333302 // 这个是3.33333
10.000000 9.99999905
就是10/3.0*3输出为什么是10.000000而不是9.999999
lllluoyj 2019-12-30
  • 打赏
  • 举报
回复
引用 楼主 RogerRro的回复:
就是10/3.0*3输出为什么是10.000000而不是9.999999
寻开心 2019-12-30
  • 打赏
  • 举报
回复
要知道小数点后的数字的二进制表示法
小数点后的各个数位分别表示
0.5
0.25
0.125
0.0625
0.03125
0.015625
......
是拿这些小数求和得到具体到数值的, 显然这些数不能精确的表示3.33333333这样的,那么就是最接近这个数字的数了
浮点数独精度是6~7位, 说的就是近似能保证小数点后6或者7位的数值是准确的


寻开心 2019-12-30
  • 打赏
  • 举报
回复
精度问题,c那里你多放一个小数点后的3就对了
float a,b,c,d;
a = 10.0 /3 ;
printf("%.8f\n", a);
d = 3.333333;
printf("%.8f\n", d);
printf("%8f %.8f\n", a*3, d*3);

输出结果:
3.33333325 // 这个是10/3
3.33333302 // 这个是3.33333
10.000000 9.99999905
自信男孩 2019-12-30
  • 打赏
  • 举报
回复
float浮点数的有效位是6位,不是说总共只有6位小数。

69,369

社区成员

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

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