Я пытаюсь реализовать алгоритм Штрассена на С++. Я хочу разделить квадратную матрицу «hA» на 4 равных блока.
// Initialize matrices on the host
float hA[N][N],ha11[N / 2][N / 2], ha12[N / 2][N / 2], ha21[N / 2][N / 2],
ha22[N / 2][N / 2];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
hA[i][j] = i;
//hB[i][j] = i;
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("\n%d,%d\n", i, j);
if (i < N / 2 & j < N / 2) {
ha11[i][j] = hA[i][j];
} else if (i < N / 2 & j >= N / 2) {
ha12[i][j] = hA[i][j];
} else if (i >= N / 2 & j < N / 2) {
ha21[i][j] = hA[i][j];
} else if (i >= N / 2 & j >= N / 2) {
ha22[i][j] = hA[i][j]; //faulty!
}
}
}
Я использовал описанный выше метод для разбиения, и он дает сбой, как показано в выводе ниже. Но он отлично работает, когда я удаляю последнее сравнение в лестнице «если еще».
Почему «i» имеет неправильное значение, которое даже находится за пределами условия цикла? Есть ли более удобный способ разбиения, чем этот?