Это один из тех крошечных вопросов по оптимизации, который не имеет значения, но в любом случае интересно думать.Что происходит быстрее: условное или несколько дополнительных арифметических операций?
У меня есть две разные строки Java код, который я мог бы использовать:
coord < 0 ? (coord % max + max) % max : coord % max
или(coord % max + max) % max
Я предполагаю, что Макс всегда положительная ИНТ и коорд может быть любой действительный int. Я считаю, что эти две строки всегда должны давать тот же результат, который заключается в том, чтобы обернуть координату, которая ушла с краю моей карты, где есть монстры.
2 очевидно быстрее в случае, если координата отрицательна. Но если координация положительная, я не уверен, что было бы быстрее. Точка 1 будет делать меньше математических операций в случае, если координация положительная, но я не уверен, что это на самом деле быстрее или нет. Компилятор может даже оптимизировать 1 в 2. Кто-нибудь знает?
К слову, я видел, как люди используют функции post post для обмена координатами, которые просто добавляют max в случае, если координата отрицательна, и это ломается в случае, если ord> max * -1. Я хочу, чтобы у меня было дело с этим делом.
(позже отредактировано) The context is up on Github для тех, кто хотел бы его увидеть. И да, я знаю, что это не имеет значения для производительности моей программы, но я просто подумал, что это интересный вопрос.
Никто не знает наверняка, не видя контекста, и большинство людей не заботятся об этом так или иначе. Единственный способ убедиться в том, что нужно профилировать замкнутый цикл, который включает этот код. Конечно, если вокруг этого кода нет жесткой петли, я не понимаю, почему в первую очередь это беспокоило бы эту проблему. – dasblinkenlight
Как я уже сказал, это просто любопытство. Реальный вопрос: «Что быстрее, несколько арифметических операций или одно условное?» –
Всё зависит. Стоимость филиала не фиксирована, и ни одна из них не является стоимостью остатка. – harold