每次使用'start without degugging'(ctrl-F5)而不是正常的'debug'(F5)时,我一直从我的代码中得到这个奇怪的输出。
当我尝试在debug(按F5)模式中找到norm_differnece的以下值时,它给出了norm_difference的正确答案
normdifference = 1.000000
但是'在没有调试的情况下启动'(按ctrl-f5)输出错误
normdifference = 1456816083547664100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
以下是给出输出的代码段 注意:X [] =是存储的DOUBLE值的数组
for(i=0;i<n;i++){
sum_difference += (pow((X[i*n]-X[i]),2));
}
norm_difference = sqrt(norm_difference);
for(i=0;i<n;i++){
sum_norm_1 += pow(X[i],2);
}
norm_1 = sqrt(norm_1);
//Take square root of the sum of squares for the row
printf("normdifference = %f \n norm_1 = %f \n",norm_difference,norm_1);
答案 0 :(得分:2)
可能你正在阅读数组的末尾。一些处于调试模式的编译器会激活内存,但不会处于发布模式,因此在调试中,错误的读取会获得0,而在发布时它会获得一些大数
或根据@Marcelo Cantos你的变量没有初始化 - 在调试中它们可能从0开始
答案 1 :(得分:1)
您可能尚未将sum_difference
和sum_norm_1
初始化为零。
答案 2 :(得分:0)
您的代码中似乎有一些错误。我猜它应该是:
sum_difference = 0; // <<< FIX
for (i = 0; i < n; i++)
{
sum_difference += (pow((X[i * n] - X[i]), 2));
}
norm_difference = sqrt(sum_difference); // <<< FIX
sum_norm_1 = 0; // <<< FIX
for (i = 0; i < n; i++)
{
sum_norm_1 += pow(X[i], 2);
}
norm_1 = sqrt(sum_norm_1); // <<< FIX
//Take square root of the sum of squares for the row
printf("normdifference = %f \n norm_1 = %f \n", norm_difference, norm_1);