[英]Wrong C++ division result
/*我目前正在学习 C++ 作为我的核心科目的一部分*/
奇怪的是,在编写另一个长程序时,我遇到了这个实例
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int a,b,res; float c;
cin>>a;
cin>>b;
cin>>c;
res=(a-b)/c;
cout<<res;
}
输入 :
a = 2 b = 1 c = 0.2
输出 :
4
期望输出:
5
我需要在开始a和结束b之间找到res ,(增量c的步数)被截断为最接近的地板整数值。
我尝试将(ab)定义为另一个int ,结果仍然是 4 而不是 5。
但简单测试
int main()
{
cout<<(2-1)/0.2;
}
正确给了 5。
还有一个疑问:如果我没有像上面那样定义任何变量,系统将为结果假定什么数据类型?
这几乎肯定是一个舍入错误。 自己测试一下->
a = 2
b = 1
c = 0.2000000001
res = 4
我建议使用双精度而不是浮点数,它应该为您提供所需的精度。 当然,从双精度数到整数总是有四舍五入错误的风险,而不使用某种四舍五入函数来补偿
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.