Большинство компиляторов могут выполнять разумную работу по оптимизации, когда вы даете им шанс. Например, если вы делите на константу , вполне вероятно, что компилятор может / будет оптимизировать это, так что это делается почти так же быстро, как и все, что вы можете разумно заменить.
Когда, однако, у вас есть два значения, которые не известны заранее, и вам нужно разделить одно на другое, чтобы получить ответ, если бы у компилятора было много возможностей сделать с ним много, он бы - и если уж на то пошло, если бы у компилятора было много возможностей для его оптимизации, то процессор сделал бы это так, чтобы компилятору это не требовалось.
Изменить: Ваша лучшая ставка на что-то подобное (это довольно реалистично), вероятно, будет что-то вроде:
double scale_factor = get_input();
for (i=0; i<values.size(); i++)
values[i] /= scale_factor;
Это относительно легко преобразовать во что-то вроде:
scale_factor = 1.0 / scale_factor;
for (i=0; i<values.size(); i++)
values[i] *= scale_factor;
Я не могу действительно так или иначе гарантировать, что конкретный компилятор сделает это. Это в основном сочетание снижения прочности и подъема петли. Конечно, есть оптимизаторы, которые знают, как сделать то и другое, но то, что я видел в компиляторе C #, говорит о том, что это не так (но я никогда не проверял ничего подобного, и тестирование, которое я проводил, было несколько версий назад ...)