2012-02-27 90 views
0

我正在運行此代碼來計算x[i][j] - y[j]的平方根,但它給了我胡話!sqrt函數在C++

 bool X[I][J]={}; //nodes 
    bool Y[J]={};  //medians 

    double denominator=0; 
    double miu=0; 
    outFile<< "denominator= " << denominator << endl; 
    for(i=0;i<I;i++) 
     for(j=0;j<J;j++) 
     { 
      denominator+=sqrt(double (X[i][j]-Y[j])); 
     } 
    outFile<< "denominator= " << denominator << endl; 

第一outFile打印0,這是原始值,但第二個打印-1.#IND

+1

'X [I] [J]'&'Y [J]'已經包含了無意義,如果它們是局部變量並且未被初始化。所以*你會收穫什麼你播種*和那* *無意義*值。 – 2012-02-27 04:06:21

+0

你是否有任何spl可以找到2個bool值的sqrt? – 2012-02-27 05:01:11

回答

2

這可能意味着,在某些時候X[i][j] - Y[j]是負面的,而你從sqrt得到一個NaN(非數字)回來。

有關NaNs的解釋請參見this wikipedia page

此外,XY都是布爾型的數組,因此X[i][j] - Y[j]永遠是1,0,或-1,你真的不需要sqrt。這是你想要的嗎?

0

問題是你不能取一個負數的平方根 - 你得到一個虛數。只需使用abs首先檢索差的絕對值:

bool X[I][J] = {}; // nodes 
bool Y[J] = {};  // medians 

double denominator = 0; 
double miu = 0; 
outFile << "denominator= " << denominator << endl; 
for(i = 0; i < I; i++) 
    for(j = 0; j < J; j++) 
    { 
     denominator += sqrt(double (abs(X[i][j]-Y[j]))); 
    } 
outFile << "denominator= " << denominator << endl; 
0

看起來你可能會採取負數的平方根 - 導致你看這實質上意味着「不是一個數字」

0

由於X和Y是布爾,也有說法的機會價值傳遞給sqrt()的結果爲負數。

0

我沒有得到相同的結果,我做的都是零。

http://ideone.com/25ZPf

對於兩個陣列的初始值設定應該設置的所有值爲零,所以相減的平方根應該是零,以及。它們是布爾數組的事實應該不重要,因爲這些值將被上傳到0.0。

東西告訴我你發佈的代碼不是導致錯誤的實際代碼。