在C ++中优化执行速度的简单公式

时间:2017-09-28 00:24:16

标签: c++ performance

我正在研究速度非常重要的程序,因为一切都在循环中。我想知道这两个方程中哪一个更快执行。

第一个是:

smoothing / (1 + smoothing)

其中smoothingconst unsigned int

第二个是:

1-1/(1+smoothing)

第一个是否会更快,因为等式中涉及的运营商较少?第二个会更快成为smoothing只被称为一次吗?还有另一种选择比这两种更快吗?

1 个答案:

答案 0 :(得分:2)

正如其他人所指出的那样,由于整数运算,表达式as-is将分别产生0或1(无论你预期的浮点结果是否会丢失)。这可以通过在表达式中使用浮点文字来解决(例如smoothing / (1.0f + smoothing)),这将产生浮点结果。

除此之外,你不应该担心这个级别的手动优化。您的编译器可以自己优化等效表达式;你的重点应该放在编写作为程序员最容易阅读的东西上。

如果修复了上面提到的浮点问题,gcc 7.2会为两个表达式生成等效的程序集,并且优化已禁用。所以没什么好担心的。他们都是“快”。

同样,如果smoothing确实是常量,则表达式的结果也是常量,并且不需要在循环的每次迭代中重新计算。您可以简单地声明另一个常量变量,其值是表达式的结果。