Оптимальный способ зависит от цели, действительно.
Прежде всего, умножение быстрее деления.
Так что, если вам нужно написать a = a / 2;
, лучше написать a = a * 0.5f;
.
Ваш компилятор обычно достаточно умен, чтобы заменить деление на умножение на константы, если результаты одинаковы, но он, конечно, не будет делать это с переменными.
Иногда вы можете немного оптимизировать, заменяя деления на умножения, но могут быть проблемы с точностью.
Некоторые другие операции могут быть быстрее, но менее точными.
Давайте рассмотрим пример.
float f = (a * 100000) / (b * 10);
float g = (a / b) * (100000 / 10);
Они математически эквивалентны, но результат может быть немного другим.
Первый использует два умножения и одно деление, второй использует одно деление и одно умножение. В обоих случаях возможна потеря точности, это зависит от размеров a и b, если они являются маленькими значениями, первое работает лучше, если они являются большими значениями, второе работает лучше
Тогда ... если у вас есть несколько констант, и вы хотите скорость, сгруппируйте константы вместе.
float a = 6.3f * a * 2.0f * 3.1f;
Просто напишите
a = a * (6.3f * 2.0f * 3.1f);
Некоторые компиляторы хорошо оптимизируют, другие оптимизируют меньше, но в обоих случаях нет риска хранить все константы вместе.
После того, как мы скажем это, мы должны часами говорить о том, как работают процессоры.
Даже одна и та же семья, подобная Intel, работает по-разному между поколениями!
Некоторые компиляторы используют инструкции SSE, другие нет.
Некоторые процессоры поддерживают SSE2, некоторые SSE, некоторые только MMX ... некоторые системы также не имеют FPU!
Каждая система выполняет некоторые вычисления лучше, чем другие, найти общее дело сложно.
Вы должны просто написать читаемый код, чистый и простой, не слишком заботясь об этих непредсказуемых оптимизациях очень низкого уровня.
Если ваше выражение выглядит сложным, сделайте некоторую алгебру и \ или зайдите в поисковую систему wolframalpha и попросите его оптимизировать это для вас:)
Сказав, что на самом деле вам не нужно объявлять одну переменную и заменять ее содержимое снова и снова, компилятор обычно может оптимизировать меньше в этой ситуации.
a = 5 + b;
a /= 2 * c;
a += 2 - c;
a *= 7;
просто напишите свое выражение, избегая этой путаницы:)
a = ((5 + b) / (2 * c) + 2 - c) * 7;
О вашем конкретном примере, 6000.f * a * a
, просто напишите его, как вы пишете, не нужно его менять; это нормально, как есть.