我写了下面的代码,但我遇到了一个问题。当我将1059255除以1时,结果将为零,因为除法的结果接近零并且变得圆整。我如何得到结果除零以外的结果
for(x = 2 ; x <= 1059255; x++)
{
y += (1/1059255) * x;
}
需要进行哪些更改才能获得正确结果?
我写了下面的代码,但我遇到了一个问题。当我将1059255除以1时,结果将为零,因为除法的结果接近零并且变得圆整。我如何得到结果除零以外的结果
for(x = 2 ; x <= 1059255; x++)
{
y += (1/1059255) * x;
}
需要进行哪些更改才能获得正确结果?
这是整数除法。如果将x/y除以x小于y,则结果将始终为0.将这些数字中的任意一个转换为浮点数。
这里有一些可能性:
y += (1.0f/1059255) * x; // float literal divide by integer, this will work
或
y += (static_cast<float>(1)/1059255) * x; // casting integer literal to float, this works too
很明显,你可以做分母的浮动太大,这都可以用做双打也。
这是因为它是一个整数除法。使操作数浮点或双精度:
y += (1.0/1059255)*x;
使用浮点数类型,如float或double。
因为1/1059255
是整数除法0
将其更改为1.0/1059255
会得到你预期的结果。
请注意,1.0
是double
类型,1.0f
是float
类型,请选择适当的一种。
你会想要的东西,像这样:
const int start = 2;
const int end = 1059256;
float result = 0.0f;
for(int x = start; x < end; ++i){
result += 1.0f/float(MAX) * x;
}
你在做什么是整数除法,从而有效地丢弃小数点,只是保持整个整数。
试试这个:
for(x = 2 ; x <= 1059255; x++)
{
y += (1.0/1059255.0)*x;
}
使用本司内部漂浮物,使乘法也得到正确的:
for(x = 2 ; x <= 1059255; x++)
{
y += (float(1)/1059255)*x;
}
您需要使用的类型,可以代表不是整数其他号码。无论你是想浮点或定点类型取决于精确度是多么的重要。但是,使用浮点数很容易。
double x, y = 0;
for(x = 2 ; x <= 1059255; x++)
{
y += (1.0/1059255.0)*x;
}
如果您发现错误的数量是不可接受的,请查看定点数字。
在C++中的一个整数两个整数除法的结果。在这种情况下,您将分割两个整数,所以结果将总是被截断为0
。
我不能肯定地告诉从你的问题,但你可能想浮点除法,你可以通过添加后缀.0
的字面力。此外,我看不出有任何理由要改变一个部门+繁衍成一个单一的部门:
for(x = 2 ; x <= 1059255; x++)
{
y += x/1059255.0;
}
但是,如果这是你真正的代码,我们没有理由做循环,就好象你可以随时计算出结果恒定时间(因为内部循环项与循环索引值成线性比例)。