1
我正在XCode中開發一個應用程序,必須爲算法寫一點C。這裏是C代碼的一部分:有很簡單的C代碼問題
double dataTag[M][N];
// dataTag initialized to values.....
double w[N]; // This is outside for loop at the top level of the method
for (int i = 0; i < N; i++) {
w[i] = pow(10.0, dataTag[2][i]/10.0/b);
}
//This is inside for loop.....
double disErr[N];
// disErr set and values confirmed with printArray...
double transedEstSetDrv[N][M];
// transedEstSetDrv set and values confirmed with printArray...
double stepGrad[M] = {0, 0, 0};
for (int j = 0; j < M; j++) {
double dotProductResult[M];
dotProductOfArrays(w, disErr, dotProductResult, N);
stepGrad[j] = sumOfArrayMultiplication(transedEstSetDrv[j], dotProductResult, M);
}
// Print array to console to confirm values
NSLog(@"%f %f %f", stepGrad[0], stepGrad[1], stepGrad[2]); <-- if this is present algorithm gives different results.
//Continue calculations......
所以這是C中算法的一部分,它在for循環中。奇怪的部分是打印stepGrad數組的NSLog。取決於我是否對NSLog的調用發表評論 - 算法作爲一個整體給出了不同的結果。
如果有人提供了一些調試建議,那將會很棒。
謝謝!
更新1:
它具有相同的問題簡單的例子,給更多的代碼來支持的問題。
更新2:
刪除了length_of_array功能和只是爲了簡化已知數量的替換它。
您有內存錯誤。可能是緩衝區溢出。您沒有包含足夠的代碼來確定錯誤,但我的猜測是'w'作爲參數傳遞,'LENGTH_OF_ARRAY(w)'不能按照您的預期工作。看到這個答案http://stackoverflow.com/a/10349610/646887 –
你可以給我們一個有和沒有printArray的輸出的例子嗎? – vitormm
嗨,大家好,感謝您的快速評論。我已經更新了我的答案,並會看看類似的內容。 我將輸出值與Matlab原始實現輸出及其經度和緯度進行比較。我需要在小數點後至少有6位小數,它只給出了5個。如果我有NSLog行 - 我得到7匹配,如果有意義 –