Когда цикл разворачивается, как называются последние итерации?

Если цикл разворачивается 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 + 61. Вам также потребуется обработка «последних итераций», которая может быть такой же простой, как исходный цикл:

// handle the final 0 to 3 iterations
for (; i < max; i++) {
  sum += i;
}

1 Действительно, компилятор, вероятно, даже лучше справится с задачей упрощения исходного цикла, часто полностью удаляя его и вычисляя окончательный результат непосредственно путем умножения на основе формулы суммы. Ведь это только пример.


person BeeOnRope    schedule 02.12.2017    source источник
comment
Мнение: их по-прежнему называют итерациями. Вместо того, чтобы делать что-то 100 раз, вы делаете 10 дел 10 раз. Итак, вы все еще повторяете.   -  person Lasse V. Karlsen    schedule 03.12.2017
comment
@LasseVågsætherKarlsen - да, я не хочу избегать слова «итерации», но есть какой-то краткий способ описать эти итерации, например, последние итерации (но это не так), или, возможно, хвостовые итерации или что-то еще , но точный термин ускользает от меня, и я ищу совета у сообщества.   -  person BeeOnRope    schedule 03.12.2017
comment
Эпилог или эпилог, но я обычно называю это просто хвостом.   -  person harold    schedule 03.12.2017


Ответы (3)


Всего несколько предложений:

person Christian Fries    schedule 10.09.2020

Как насчет оставшихся итераций? Он хорошо подходит под определение остатка, хотя я не знаю, общепринятый ли это термин.

person skiggety    schedule 10.09.2020

Я бы назвал это частью после цикла, которая обрабатывает оставшиеся итерации.

Когда цикл разворачивается, как называются последние итерации?

Проблема в том, что вопрос предполагает, что он имеет стандартное/хорошо известное имя; но это было бы глупо (если вы дадите каждому небольшому, но распространенному фрагменту кода имя, у вас будет так много имен, что никто никогда их не запомнит, что разрушит любую цель, которую могло иметь присвоение имен).

Конечно (для документации) это не исключает использования временных имен или временных фраз для повышения краткости; либо определяется глоссарием, либо определяется встроенным (см. примечание), либо определяется контекстом.

Примечание. Я обычно определяю вещи как встроенные. Например, если бы я неоднократно упоминал конечную часть (часть после цикла, которая обрабатывает все оставшиеся итерации), то я мог бы объяснить это один раз, а затем просто говорить конечную часть для каждого последующего вхождения и полагаться на то, что читатель запомнит то, что я сказал. имеется в виду конечная часть.

person Brendan    schedule 03.09.2020