0

好的,所以我尝试使用 for 循环而不是 while 循环来计算无限和,而该死的代码不起作用,我不知道为什么。我得到了两个“我到了这里”的一次,然后什么也没有。:\

有谁知道为什么我的代码不起作用,只是看起来像冻结或挂起?循环应该以我制作它们的方式结束,对吧?这是当前的问题代码

        check=0;
        cerr << "I got here" << endl;
        for (int m=1;m<m+1;m++)
        {
          cerr << "I got here" << endl;
            for (int n=1;n<n+1;n++)
            {
                if (check==0)
                {
                  anaPhi[i][j][k]=1.0/(m*m*m*n*n*n)
                  *cos(k*deltat*sqrt(5.0)*pi/4.0
                  *sqrt(m*m+4.0*n*n))
                  *sin(m*pi*i*h/4.0)
                  *sin(n*pi*j*h/2.0);
                  check=1;
                }
                else
                {
                  anaPhi[i][j][k]= anaPhi[i][j][k]
                  +1.0/(m*m*m*n*n*n)
                  *cos(k*deltat*sqrt(5.0)*pi/4.0
                  *sqrt(m*m+4.0*n*n))
                  *sin(m*pi*i*h/4.0)
                  *sin(n*pi*j*h/2.0);
                }
            }
        }
    }

我刚刚测试了这段代码,这段代码也不起作用!

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int b=0;
    for (int m=1;m<m+1;m=m+2)
    {
        b=cos(b)+sqrt(b);
    }
    cout << b << endl;
    return 0;
}
4

3 回答 3

1

你的循环条件是错误的。怎么会m<m+1是假的?

于 2013-05-06T02:34:54.610 回答
1

还有一点:

 if (check=0)

应该

 if (check == 0) //^^logical comparison not assignment
于 2013-05-06T02:41:15.787 回答
1

我看到了几个问题。

  1. if(check=0)将始终将检查设置为 0。

  2. 因为你使用n= n+2,它永远不会坏。因为在某些时候你会得到 n = 0x7FFFFFFE(最高正偶数),在这种情况下 n+1 大于 n。然后它会换行到 0x80000000(最负符号的 int,仍然是偶数),并且 n+1 仍将 > n。如果你能够得到 n = 0x7FFFFFFF,那么由于整数环绕,n + 1 实际上会小于 n。

  3. 除了满足规则集之外,似乎没有其他方法可以摆脱 for 循环。

于 2013-05-06T02:42:09.933 回答