C++ 将相同的数字除以2,但作为int和float时的不同输出
为什么当我把1234567890除以2时,我得到的答案略有不同C++ 将相同的数字除以2,但作为int和float时的不同输出,c++,numbers,division,C++,Numbers,Division,为什么当我把1234567890除以2时,我得到的答案略有不同 #include <iostream> using namespace std; int main() { float m; int n; cin>>n; n/=2; cout<<n<<endl; cin>>m; m/=2; cout<<m; } #包括 使用名称空间std; int ma
#include <iostream>
using namespace std;
int main()
{
float m;
int n;
cin>>n;
n/=2;
cout<<n<<endl;
cin>>m;
m/=2;
cout<<m;
}
#包括
使用名称空间std;
int main()
{
浮动m;
int n;
cin>>n;
n/=2;
coutfloat
使用24位作为尾数(有点像:IEEE使用23加一个隐式位),而int
可能使用31位(或63位;另一位实际上是符号位)。精确表示的值位需要30位(我想)因此,float
值是四舍五入的。这是由于整数与常规除法的关系。当两个整数相除时,结果也是一个int
,这是在执行5/2
返回2
时造成的。浮点数和double没有这个问题。要绕过int问题,可以执行(double)五/二
使用五和二作为整数。请同时发布输出。您在这里讨论的问题是整数被截断。OP担心他的浮点结果不能准确地表示真实答案。不过,double
可以解决他的问题。因为数字本身是相等的,所以double会有更多精确性。当然,具体值恰好是均匀的,也就是说,它不会受到特定问题的影响。