2013-05-06 49 views
0

好吧,所以我正在嘗試使用for循環而不是while循環計算無限和,並且代碼不工作,我不知道爲什麼。我得到了兩個「我到了這裏」的一次,然後什麼也沒有。 :\C++無限和碼掛起?冷凍?我不確定

有誰知道爲什麼我的代碼不工作,只是看起來像凍結或掛起?循環應該以我製造它們的方式結束,對吧? 這裏是目前的問題代碼

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

回答

1

我看到一對夫婦的問題。

  1. if(check=0)永遠集檢查0

  2. 因爲你使用n= n+2,它永遠不會打破。因爲在某些時候你得到n = 0x7FFFFFFE(最高正偶數),在這種情況下,n + 1> n。然後它包裝到0x80000000(最負的有符號整數,仍然),n + 1仍然> n。如果你能得到n = 0x7FFFFFFF,那麼由於整數環繞,n + 1實際上會小於n。

  3. 似乎沒有任何其他方式可以跳出for循環而不是滿足編碼集。

+0

但是我只對我的'm'和'n'變量使用奇數。 如果它假設是從不終止的奇數,有沒有辦法在C++中做奇數和? – Mechy 2013-05-06 02:49:34

+0

嗯,沒錯,所以你應該到0x7FFFFFFF。這可能是因爲你沒有等足夠長的時間。你是否已經用char而不是int來嘗試循環(所以它只會上升到127,然後回到-128)作爲一個起點? – 2013-05-06 02:51:21

+0

我現在就試一試,並將結果發回。 編輯:是的,事情只是掛起。 :\即使在一個糟糕的127 ... 我要嘗試和現在做的偶數,看看是否改變的事情。 – Mechy 2013-05-06 02:53:02

1

您的循環條件是錯誤的。 m<m+1怎麼會是假的?

+0

查看我發佈的第二個代碼。如果你編譯。我保證它會結束。 只有這麼多的數據可以保持整數,直到它不能變大爲止,並且只增加1就會導致返回相同的數字。 – Mechy 2013-05-06 02:41:44

+0

它編譯但它永遠不會終止! – Ryan 2013-05-06 02:43:55

+0

由於整數環繞,第二組代碼(使用m ++作爲增量)將在m = 0x7FFFFFFF時終止。 (對於有符號的int,0x80000000是<0x7FFFFFFF)。 – 2013-05-06 02:45:32

1

還有一點:

if (check=0) 

應該

if (check == 0) //^^logical comparison not assignment 
+0

哦!謝謝你。 – Mechy 2013-05-06 02:44:48