2016-03-02 72 views
1

我運行位的代碼,其中我需要比較兩個2D陣列以任何方差。我用下面的代碼行檢查和比較值的嘗試,但測試失敗,每次= if(arr1[a][b] != arr2[a][b] || arr1[a][b] + .1 != arr2[a][b] || arr1[a][b] - .1 != arr2[a][b]) {C++檢查如果一個雙距離的0.1另一個雙(+/-)

我知道這是因爲||聲明的失敗,因爲其中一個要求得到滿足。所以我必須找到另一種方法來確定存儲在數組中特定位置的double是否與並行位置中的另一個數組相匹配。有

int numberOfFailedCompares = 0; 
for(int a = 0; a < 20; a++) { 
    int b = 0; 
    while(b < 20) { 

     if(arr1[a][b] != arr2[a][b] || arr1[a][b] + .1 != arr2[a][b] || arr1[a][b] - .1 != arr2[a][b]) { 
      numberOfFailedCompares++; 
      cout << numberOfFailedCompares << endl; 
     } 

     b++; 
    } 
} 

在C++中的聲明,這將讓我檢查值是+/- 0.1閾值之內:

這裏是我完整的代碼?類似於

if(arrLocation1 (+/- .1) == arrLocation1) { 
... 
} 
+0

「每次都失敗」是指它從來不是真的,當它應該是,或者它永遠是真的,當它不應該或什麼? – immibis

+0

另外,1.0是否應該匹配1.05?因爲這些距離比0.1更接近,但它們之間的距離並不完全相等,因此您的測試精確度爲0.1。 – immibis

+0

另外,如果數字是0.999999999999999分開或1.000000000000001分開? – immibis

回答

2

「方差」是指「在X內」,而不是「等於某物加X或某物減X」。不要比較平等,你比較差/比你的差異更大。因此,例如,要測試+/- .1的方差:

if (b >= a-.1 && b <= a+.1) 
+0

我不得不使用'||'而不是'&&',因爲單個值不能大於另一個值;) –

1

這個怎麼樣?

#define eps .1 
... 
if(fabs(x-y) <= eps) 
    ... 
相關問題