2014-01-17 32 views
2

我有一個代碼段,其中有一個if語句檢查複雜數組的對角元素,如果它們是(1,0)(表示真實部分是1和虛部爲0)或非常接近它然後繼續;否則停止。但由於某些原因,操作總是返回0,雖然元素(0.999999,0.000000)(1.000001,0.000000)等如果條件問題(C++)

下面的代碼,我有:

for (i=1; i<=n; i++){ 
    if ((real(c[i][i][1]) < (1/100000)+1) && (imag(c[i][i][1]) < 1/100000) && (real(c[i][i][1]) > (-1/100000+1) && (imag(c[i][i][1]) > -1/100000)){ 
     cout<<"Operation continues..."; 
    } 
    else 
     return 0; 
} 

在此先感謝。

+2

你在你的頭上。從簡單的事情開始。例如,首先計算1/100000的值,看看它是否是你認爲的值。 –

+1

10/100000 這將給出值0,因爲它是整數除法。 您可能需要10.0/100000 – jcoder

+0

請在尋求幫助之前重構它。 –

回答

5

此整數除法的產量爲0,因爲分母的大小比分子更大:

1/100000 

這裏需要使用至少一個浮點數。例如

1.0/100000 
+0

工作,感謝很多人。 – user2661191

0

1/100000 == 0,因爲它是整數除法: 您可以寫信0.000011. /100000.

順便說一句,你可以寫你的循環:

constexpr double thresold = 0.00001; 
for (i = 1; i <= n; i++) { 
    if (std::abs(real(c[i][i][1]) - 1.) < thresold 
     && std::abs(imag(c[i][i][1]) - 1.) < thresold) { 
     cout << "Operation continues..."; 
    } 
    else 
     return 0; 
} 
+0

或者只是簡單地檢查'std :: cabs(c [i] [i] [1] - 1) LutzL