实际上,最佳方式取决于目的。
首先,乘法比除法快。
所以如果你必须写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);
有些编译器优化得很好,有些编译器优化得不太好,但在这两种情况下,将所有常量放在一起是没有风险的。
说完这些,我们应该花几个小时讨论处理器的工作原理。
即使是像英特尔这样的同一个家族,世代之间的工作方式也不同!
有些编译器使用 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,随你写,不用改;没关系。