这是一个非常奇怪的问题。我看不到code1和code2之间的任何区别。但是,应该有所区别,因为它们会产生不同的结果:(注意f0和f0A(充当缓冲区))
code1:
for (k = 0; k < 6; k++) {
r1 = i0 + 6 * k;
f0 = 0.0F;
for (r2 = 0; r2 < 6; r2++) {
f0 += (float)b_a[i0 + 6 * r2] * p_est[r2 + 6 * k];
}
a[r1] = f0;
}
code2:
float f0A[6] = {0};
for (k = 0; k < 6; k++) {
r1 = i0 + 6 * k;
for (r2 = 0; r2 < 6; r2++) {
f0A[r2] += (float)b_a[i0 + 6 * r2] * p_est[r2 + 6 * k];
}
}
for (r2 = 0; r2 < 6; r2++) {
r1 = i0 + 6 * r2;
a[r1] = f0A[r2];
}
在第一个循环中,您将a [r1]设置为存储在f0中的总和。它被添加到每个循环中。
[在第二个循环中,您没有进行求和,您的循环使用+ =,但是将每个循环存储在不同的f0A索引中。因此没有给a [r1]正确的值
有区别