C++ 将相同的数字除以2,但作为int和float时的不同输出

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

为什么当我把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 main()
{
浮动m;
int n;
cin>>n;
n/=2;

cout
float
使用24位作为尾数(有点像:IEEE使用23加一个隐式位),而
int
可能使用31位(或63位;另一位实际上是符号位)。精确表示的值位需要30位(我想)因此,
float
值是四舍五入的。

这是由于整数与常规除法的关系。当两个整数相除时,结果也是一个
int
,这是在执行
5/2
返回
2
时造成的。浮点数和double没有这个问题。要绕过int问题,可以执行
(double)五/二
使用五和二作为整数。

请同时发布输出。您在这里讨论的问题是整数被截断。OP担心他的浮点结果不能准确地表示真实答案。不过,
double
可以解决他的问题。因为数字本身是相等的,所以double会有更多精确性。当然,具体值恰好是均匀的,也就是说,它不会受到特定问题的影响。