这是:
int i = 100 * 0.6;
不太正确吗?
int i = 100 * (0.6F);
对于这样一个简单的问题,我深表歉意,但我没有记住数据类型促销的所有规则,我不确定如何验证这一点.
解决方法
它可以有所作为.对于
example:
int i = (1 << 24) + 3; printf("%d\n",(int)(i * 0.6)); // 10066331 printf("%d\n",(int)(i * 0.6f)); // 10066332
原因是第一次的计算是以双精度完成的,后者是单精度的.单精度不能表示大于1的所有整数,24.
另一个example(由@EricPostpischil在下面的评论中提供):
int i = 100; printf("%d\n",(int)(i * 0.29)); // 28 printf("%d\n",(int)(i * 0.29f)); // 29
这里的原因是双精度情况下的中间结果略低于29,因此截断到28.
所以我建议允许双重精度(即省略f / F)(然后使用round()而不是依赖于隐式截断),除非你有一个很好的理由去做.
原文地址:https://www.jb51.cc/c/112579.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。