C ++变量总是为零

时间:2012-12-04 12:25:26

标签: c++ for-loop zero

我正在使用一些if语句运行一个简单的for循环。在这个for循环中,3个变量将被赋予一个值,具体取决于for循环中的索引值。看起来相当简单,当我运行代码时,值总是为零,我不知道为什么会发生这种情况。我的for循环在下面提供。我很感激任何建议。

double A [N+1];
double r;
double s;
double v;
for(int i = 2; i < N+1; i++)
{
    if(i == 2)
    {
         r = 1/2/i/(i-1);
         s = -1/2/(i*i - 1);
         v = 1/4/i/(i+1);
    }
    else if(i <= N-2 && i > 2)
    {
        r = 1/4/i/(i-1);
        s = -1/2/(i*i - 1);
        v = 1/4/i/(i+1);
    }
    else if(i <= N-4 && i > N-2)
    {
        r = 1/4/i/(i-1);
        s = 0;
        v = 1/4/i/(i+1);
    }
    else
    {
        r = 1/4/i/(i-1);
        s = 0;
        v = 0;
    }

    A[i] = r*F[i-2] + s*F[i] + v*F[i+2];
    cout << r << s << v << endl;

}

5 个答案:

答案 0 :(得分:15)

这是因为你正在使用整数除法。一个例子:

r = 1/2/i/(i-1);

这与:

相同
r = ((1 / 2) / i) / (i - 1);

与以下内容相同:

r = (0 / i) / (i - 1);

......与以下内容相同:

r = 0 / (i - 1);

...这是0

因为1 / 2是整数运算中的0。要解决此问题,请使用浮点值。

答案 1 :(得分:4)

三件事:

  1. else if(i <= N-4 && i > N-2)毫无意义,该条件不能成立
  2. 所有分区都是整数分区 - 修复,将其中一个数字转换为双数。
  3. 作为1的结果,当i = N-1,并且i = N时,则最后一个分支被用于强制两个变量为0的地方!

答案 2 :(得分:2)

1,2和4是整数。在整数1/2 = 0和1/4 = 0

答案 3 :(得分:1)

对于整数,1/2 为零。我建议(首先)将2等常量更改为2.0,以确保它们被视为双打。

您可能还希望(尽管可能没有必要)将所有i变量也转换为浮点值,只是为了完整性,例如:

r = 1.0 / 2.0 / (double)i / ((double)i - 1.0);

r是双重的事实决不会影响=右侧的计算。它只影响最后一位(实际分配)。

答案 4 :(得分:0)

由于整数除法,<1>,1/4和-1/2总是为零。所以尝试使用1.0 / 2.0,1.0 / 4.0和-1.0 / 2.0来快速整理出来。但请遵循基础知识,不要在代码中使用许多幻数。考虑为它们创建常量并使用。