Оптимальный вариант зацикливания индексов массива

Программирование на Юнити.

Re: Оптимальный вариант зацикливания индексов массива

Сообщение maksimov 06 фев 2018, 23:08

)))
Вот так, "элементарный вопрос" превращается в неразрешимую задачу.

К слову, работающее арифметическое решение, вот:
Синтаксис:
Используется csharp
int f = i < 0 ? length - System.Math.Abs(i%length):i%length;
f = f == length ? 0 : f;
 

Только я как-то не уверен, что оно реально оптимальнее изначального:
Синтаксис:
Используется csharp
while (x > size - 1)
                x = x - size;
while (x < 0)
                x = x + size;
 

Которое при определённых условиях, можно сфейковать и до такого: (не уверен, насколько это критично в плане производительности)
Синтаксис:
Используется csharp
if (x > size - 1)
    x = x - size;
else if (x < 0)
    x = x + size;
 


"Одно/два сравнения и опциональное вычитание/сложение"
, против "двух сравнений, деления по остатку и опционального вычитания с вызовом системной функции".
Хм..
Последний раз редактировалось maksimov 07 фев 2018, 01:22, всего редактировалось 1 раз.
Красота — не прихоть полубога, а хищный глазомер простого столяра.
Аватара пользователя
maksimov
UNITрон
 
Сообщения: 154
Зарегистрирован: 19 фев 2013, 11:48
  • Сайт

Re: Оптимальный вариант зацикливания индексов массива

Сообщение samana 07 фев 2018, 00:25

Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Оптимальный вариант зацикливания индексов массива

Сообщение maksimov 07 фев 2018, 01:53

samana писал(а):Надеюсь оно https://stackoverflow.com/questions/108 ... g-my-brain


Спасибо. Идея с
int newIndex = (index + 100) % length;
просто шикарна по своей красоте и изяществу. =)

По прежнему не уверен, является ли арифметический метод производительнее сравнения, но данный способ является явно самым красивым.

Спасибо за линк!
Красота — не прихоть полубога, а хищный глазомер простого столяра.
Аватара пользователя
maksimov
UNITрон
 
Сообщения: 154
Зарегистрирован: 19 фев 2013, 11:48
  • Сайт

Пред.

Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10