无符号短差我有以下:unsigned int的VS在C++
#include <iostream>
using namespace std;
float f1(unsigned int x, unsigned int y)
{
float val;
val = float(y-x)/(y+x);
return val;
}
float f2(unsigned short x, unsigned short y)
{
float val;
val = float(y-x)/(y+x);
return val;
}
int main()
{
cout << f1(9612, 9038) << "\n" << f2(9612, 9038) << endl;
return 0;
}
在输出我从f1
和f2
两个不同的值虽然我期望的输出是相同的,因为功能是相似的。你能解释一下差异的根源吗?
'y'小于'x',所以在'f1'中,'yx'是一个很大的正数,而在'f2'中它是一个小的正数或者一个小的负数(取决于相对你的系统上'short'和'int'的大小) –
我运行了计算,结果是-0.0307774798927614。无符号类型无法处理负值。 – TuukkaX
@TuukkaX:他们当然可以,但你得到2的补充。 – lorro