Часто я знаю, что индекс не будет меньше, чем -array_size, и в в этих случаях я просто делаю my_array[(index + array_size) % array_size]. Однако иногда это невозможно гарантировать, и для таких случаев мне хотелось бы знать самый быстрый способ реализовать всегда положительную функцию по модулю. Есть несколько «умных» способов сделать это без ветвления, например
Код: Выделить всё
inline int positive_modulo(int i, int n) {
return (n + (i % n)) % n;
}
Код: Выделить всё
inline int positive_modulo(int i, int n) {
return (i % n) + (n * (i < 0));
}
Итак, есть ли стандартный способ сделать это или какой-то хитрый трюк, который я пропустил и который, вероятно, будет самым быстрым способом?
Кроме того, я знаю, что это, вероятно, принятие желаемого за действительное, но если есть способ сделать это с автоматической векторизацией, это было бы потрясающе.
Подробнее здесь: https://stackoverflow.com/questions/149 ... ulo-in-c-c
Мобильная версия