我正在使用一些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;
}
答案 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)
三件事:
else if(i <= N-4 && i > N-2)
毫无意义,该条件不能成立答案 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)