私は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のアルゴリズムの一部です。変わった部分は、stepGrad配列を出力するNSLogです。 NSLogへの呼び出しにコメントするかどうかによって、アルゴリズム全体が異なる結果になります。
誰かがデバッグの提案をしてくれれば幸いです。
ありがとうございます!
UPDATE 1:同じ問題があり、問題をサポートするために多くのコードを与え
簡略化した例。
UPDATE 2:
はlength_of_array機能を削除し、簡単のために知られている番号に置き換え。
メモリエラーです。おそらくバッファオーバーフロー。バグを確実に診断するのに十分なコードは含まれていませんが、 'w'がパラメータとして渡され、' LENGTH_OF_ARRAY(w) 'が期待どおりに動作しないと思います。この回答を見るhttp://stackoverflow.com/a/10349610/646887 –
printArrayの有無にかかわらず出力の例を教えてください。 – vitormm
こんにちは、素敵なコメントありがとうございました。私は自分の答えを更新したように見ていきます。 出力値とMatlabオリジナル実装の出力とその緯度と経度を比較します。私はドットの後に少なくとも6小数点以下の精度が必要です。それは私には5を与えます。もしNSLogラインを持っていれば、それが合っているならば7が得られます。 –