说我有以下代码用于退换。
for (int i = n - 1; i >= 0; i--) {
double temp = b[i];
if (i != n - 1) {
for (int j = i + 1; j < n; j++)
temp -= A[i][j] * b[j];
}
b[i] = temp/A[i][i];
}
但是对于我作为编程新手来说,以下内容似乎更简单:
for (int i = n - 1; i >= 0; i--) {
if (i != n - 1) {
for (int j = i + 1; j < n; j++)
b[i] -= A[i][j] * b[j];
}
b[i] /= A[i][i];
}
,每次从b[i]
迭代到j = i+1
时都需要索引j = n - 1
。但是此b[i]
是固定数量,因为此迭代不依赖于i
的值。
但是我不确定编译器更喜欢哪一个。有帮助吗?
答案 0 :(得分:2)
定义double temp = b[i];
鼓励编译器将计数temp
保留在CPU的寄存器之一中。使用您的其他代码,编译器可能会将计数保留在主存储器中。 ,不适合存储数组的寄存器。
除非非常大,否则数组可能会保留在高速缓存中,因此它仍然相当快;但是寄存器更快。