- 1
- 2
int factor = (chbFactor.Checked) ? 1 : 0; // bool to int
factor = (factor * 2) - 1; // -1 or +1
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+966.3
int factor = (chbFactor.Checked) ? 1 : 0; // bool to int
factor = (factor * 2) - 1; // -1 or +1
Вторая строчка превращает 0 в -1 а единичку не трогает
не говнокод...
int factor = (chbFactor.Checked) ? 1 : -1; говнокод? :)
Или я что-то не заметил?
Это по вашему не условный переход?
if (chbFactor.Checked) factor = 1; else factor = 0;
замечание "нет условных переходов" не засчитано.
Само собой условный переход имеет место в обоих случаях, но с ?: инструкций получается меньше.
все что я говорил относилось к С++ и х86.
Сами попробуйте и напишите 2 эквивалентных проги с циклом с несколькими перемещениями данных в цикле, в зависимости от условия на ассемблере через setx и условный переход.
Покрайней мере результат измерений на новых процессорах вас удивит. Выйгрышь за переходами и серьёзный. Конечно может и можно найти вариант, где setx быстрее, но в большинстве случаев так...
А с чем им спариватся? У них нет самцов.;p
Однако, пытаясь приблизиться к случаю со включенными оптимизациями, я провёл эксперимент вставив нужный ассмовый код в качестве volatile вставки, и пришёл к обратному выводу. А т.к. обычно программа компилируется с оптимизациями, то для себя я сделаю вывод, что обычно алгоритм с setx работает где-то на 20% быстрее, чем алгоритм с jx.
Хотя на самом деле, тут ещё вопрос в выравнивании и т.п. В каждом конкретном эксперименте может быть является возможным получить разные результаты.