Если цикл разворачивается N раз, дублируя тело N раз и уменьшая количество поездок в N раз, вам может понадобиться от 0 до N-1 «последних итераций» после цикла — ненулевые случаи, возникающие, если ваш исходный счетчик поездок не был кратен N.
Как называются эти последние итерации?
Например, следующий цикл:
int sum = 0;
for (int i = 0; i < max; i++) {
sum += i;
}
Можно развернуть в 4 раза следующим образом:
int sum = 0;
for (int i = 0; i + 3 < max; i += 4) {
sum += i;
sum += i + 1;
sum += i + 2;
sum += i + 3;
}
// "final iterations" handling here
... и автора, вероятно, упростит все тело до чего-то вроде sum += i *4 + 6
1. Вам также потребуется обработка «последних итераций», которая может быть такой же простой, как исходный цикл:
// handle the final 0 to 3 iterations
for (; i < max; i++) {
sum += i;
}
1 Действительно, компилятор, вероятно, даже лучше справится с задачей упрощения исходного цикла, часто полностью удаляя его и вычисляя окончательный результат непосредственно путем умножения на основе формулы суммы. Ведь это только пример.