我怎样才能得到除除零之外的结果

时间:2013-07-16 14:22:20

标签: c++

我写了下面的代码,但是我遇到了问题。当我将1除以1059255时,结果将为零,因为除法的结果接近零并且它已经四舍五入。

for(x = 2 ; x <= 1059255; x++)
{
    y += (1/1059255) * x;
}

获得正确结果需要进行哪些更改?

9 个答案:

答案 0 :(得分:6)

这是整数除法。如果你将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
显然你也可以让分母成为一个浮点数,这也可以用双打来完成。

答案 1 :(得分:2)

那是因为它是一个整数除法。使操作数浮动或加倍:

y +=  (1.0/1059255)*x;

答案 2 :(得分:1)

因为1/1059255在整数除法中是0

将其更改为1.0/1059255会得到您的预期结果。

请注意1.0类型为double1.0f类型为float,请选择合适的类型。

答案 3 :(得分:1)

你会想要这样的东西:

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;
}

你正在做的是整数除法,它有效地丢弃小数点并且只保留整数。

答案 4 :(得分:1)

您需要使用可以表示整数以外的数字的类型。是否需要浮点或定点类型取决于精度的重要性。但是,使用浮点数很容易做到这一点。

double x, y = 0;
for(x = 2 ; x <= 1059255; x++)
{
    y +=  (1.0/1059255.0)*x;
}

如果您发现错误的数量是不可接受的,请查看定点数字。

答案 5 :(得分:1)

在C ++中,两个整数的除法产生一个整数。在这种情况下,您要划分两个整数,因此结果将始终被截断为0

我无法从您的问题中确定,但您可能想要通过向文字添加.0后缀来强制执行浮点除法。此外,我认为没有任何理由将分组+乘法转换为单个分区:

for(x = 2 ; x <= 1059255; x++)
{
    y += x / 1059255.0;
}

但是如果这是你真正的代码,那么根本没有理由进行循环,因为你总能在恒定时间内计算结果(因为内部循环项与循环索引值成线性比例)。

答案 6 :(得分:0)

使用浮点数类型,如float或double。

答案 7 :(得分:0)

试试这个:

for(x = 2 ; x <= 1059255; x++)
{
  y +=  (1.0/1059255.0)*x;
}

答案 8 :(得分:0)

在分区内使用浮动,以便乘法也正确:

for(x = 2 ; x <= 1059255; x++)
{
    y +=  (float(1)/1059255)*x;
}