搜索
查看: 475|回复: 4
打印 上一主题 下一主题

编译软件是不是有问题?

[复制链接]
跳转到指定楼层
楼主
发表于 2017-11-8 14:27:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
直接上图,计算的这是什么?谁能告诉我怎么能给弄好。

QQ图片20171108142347.png (28.92 KB, 下载次数: 0)

QQ图片20171108142347.png

QQ图片20171108142426.png (18.61 KB, 下载次数: 0)

QQ图片20171108142426.png

QQ图片20171108142622.png (16.1 KB, 下载次数: 0)

QQ图片20171108142622.png
沙发
 楼主| 发表于 2017-11-8 14:56:48 | 只看该作者
第一张照片是正确的,输出a+b就是8.3。第二张 c=a+b,输出c就得8.29999999,什么毛病?第三章第三个输出1010.000061是什么鬼
板凳
发表于 2017-11-9 10:27:56 | 只看该作者
全部 float 改成 double
全部 %f 改成 %lf
地板
 楼主| 发表于 2017-11-10 13:53:46 | 只看该作者
4399APPLE 发表于 2017-11-9 10:27
全部 float 改成 double
全部 %f 改成 %lf

能不能告诉我是为什么
5#
发表于 2017-11-10 17:00:56 | 只看该作者
liming6475 发表于 2017-11-10 13:53
能不能告诉我是为什么

①简单,把float换成double就行了。为什么呢?因为计算机把5.2和3.1存储到变量中是用的2进制,这样存储有些数2进制  会变成无限循环小数。再相加就难免有问题。double精度高一些,可以克服问题。(比如用计算器算1÷3×3,答案是  0.9999999999,而不是1,这是一个道理)
②不定义变量c,把printf("%f",c);改成printf("%f",a+b);或干脆改成printf("%f",5.2+3.1);就行了。这样没有了相加   并存储的步骤,答案就会正确(尽管这样还是强烈建议使用double,还不行就用long double)。
详见C语言常见错误总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表