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을 얻을 –