优化一个简单的方程式,用于C 中的执行速度

Optimising a simple equation for execution speed in C++

本文关键字:用于 速度 执行 方程式 优化 一个 简单      更新时间:2023-10-16

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

第一个是:

smoothing / (1 + smoothing)

其中smoothingconst unsigned int

第二个是:

1-1/(1+smoothing)

第一个会更快,因为该方程中涉及的操作员较少?第二个会更快地变成smoothing吗?还有另一个比这两个选择快吗?

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

除此之外,在此级别上的手动优化时,您不必太担心。您的编译器能够自行优化等效表达式;您的重点应该放在编写作为程序员最可读性的内容上。

如果您修复了上述浮点问题,则GCC 7.2为两种表达式生成等效组件,并且使用优化 disabled 。因此,没有什么可担心的。他们俩都一样"快速"。

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