gpt4 book ai didi

c - 奇怪的宏观行为

转载 作者:行者123 更新时间:2023-11-30 21:24:56 27 4
gpt4 key购买 nike

这是我的源代码:

for(j=0; j<n-1; j++) {
printf("(%d %d)->(%d) {%1.9lf < %1.9lf }\n", j+1, j, j + n*(j+1), A[j + n*(j+1)], epsilon*norm);
printf("(%d %d)->(%d) {%1.9lf < %1.9lf }\n", j+1, j, idx(n, j+1, j), A[idx(n, j+1, j)], epsilon*norm);
if(A[idx(n,j+1,j)] < epsilon*norm) {
A[idx(n,j+1,j)] = 0;
}
}

这是我的 idx 宏:

#define idx(__n__, __i__, __j__) __j__ + __n__*(__i__)

在我看来,第二、第三行代码必须产生相同的输出,但事实并非如此。相反,我得到了这样的输出(n 等于 5):

(1 0)->(5) {5.393394651 < 0.000000000 }
(1 0)->(1) {6.171880741 < 0.000000000 }
(2 1)->(11) {2.966791392 < 0.000000000 }
(2 1)->(7) {2.850418342 < 0.000000000 }
(3 2)->(17) {3.370025863 < 0.000000000 }
(3 2)->(13) {4.128639694 < 0.000000000 }
(4 3)->(23) {0.290962836 < 0.000000000 }
(4 3)->(19) {0.147772573 < 0.000000000 }

我尝试使用标志 E 运行 gcc 以查看预处理器对代码执行的操作,但我看到了相同的代码行。

for(j=0; j<n-1; j++) {
printf("(%d %d)->(%d) {%1.9lf < %1.9lf }\n", j+1, j, j + n*(j+1), A[j + n*(j+1)], epsilon*norm);
printf("(%d %d)->(%d) {%1.9lf < %1.9lf }\n", j+1, j, j + n*(j+1), A[j + n*(j+1)], epsilon*norm);
if(A[j + n*(j+1)] < epsilon*norm) {
A[j + n*(j+1)] = 0;
}
}

这有什么问题吗?

最佳答案

您的宏没有正确地将扩展中的参数括起来:

#define idx(__n__, __i__, __j__) __j__ + __n__*(__i__)

应该是:

#define idx(n, i, j) ((j) + (n) * (i))

除非你真的有疯狂的想法。

这是一个错误,但不是导致您出现问题的错误。尝试将 doubleprintf 格式修复为 %f 而不是 %lf。还要验证 jnAepsilonnorm 的类型与 printf 格式一致。

关于c - 奇怪的宏观行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com