Bizdelnick писал(а): ↑01.01.2015 13:34
Я говорил главным образом о Вашем примере с заменой деления/умножения на степени двойки битовым сдвигом.
Ну, я думаю, вы согласитесь с тем, что битовый сдвиг
всегда быстрее умножения/деления на степень двойки?
Что же касается читаемости кода (мы ведь с этого начали), то битовый сдвиг - это не самая запутанная конструкция, какая может быть. Поэтому большой проблемы с читаемостью здесь нет на самом деле.
Кстати, вот с этим
Bizdelnick писал(а): ↑31.12.2014 11:42
Потому что как ни заменяй "тяжёлые" операции "лёгкими" в алгоритме n^2, он всё равно останется n^2.
я не совсем согласен.
Есть рекомендации заменять возведение в степень умножением (в определенных ситуациях).
Кроме того, в языке просто может не быть оператора степени (тот же Pascal).
Припоминается случай, когда по условиям задачи студенту дана была сложная формула (в виде системы уравнений). В качестве языка предполагался Pascal (ну, кто бы сомневался).
Одним из условий было там было x^2.
Если решать задачу "в лоб" и просто закодить формулу как есть, то нужно делать возведение в степень.
Студент так и хотел сделать.
Но Pascal не имеет оператора возведения в степень.
Нужно либо сочинять свою функцию, либо использовать математическую библиотеку, где есть функция Power(x,y), возводящая x в степень y.
Однако если отбросить вариант "решение в лоб" и освободиться от "рамок формулы" (в том смысле, что не надо пытаться её воспроизвести дословно), то находится простое и очевидное решение: x^2==x*x.
Так неужели функция возведения в степень (не важно - своя или готовая) будет быстрее и экономнее оператора умножения? Не говоря уже о том, что для готовой функции целую библиотеку цеплять надо.
Это к разговору о том, что n^2 всегда останется n^2. Вот, не всегда. Далеко не всегда.