优化一个简单的方程式,用于C 中的执行速度
Optimising a simple equation for execution speed in C++
我正在研究一个程序,因为速度确实很重要,因为一切都在循环中。我想知道执行这两个方程中的哪一个。
第一个是:
smoothing / (1 + smoothing)
其中smoothing
是const unsigned int
。
第二个是:
1-1/(1+smoothing)
第一个会更快,因为该方程中涉及的操作员较少?第二个会更快地变成smoothing
吗?还有另一个比这两个选择快吗?
正如其他人指出的那样,由于整数算术,表达式将分别产生0或1(无论您预期的浮点结果如何丢失)。这可以通过使用表达式中的浮点文字(例如smoothing / (1.0f + smoothing)
)来解决,这将产生浮点结果。
除此之外,在此级别上的手动优化时,您不必太担心。您的编译器能够自行优化等效表达式;您的重点应该放在编写作为程序员最可读性的内容上。
如果您修复了上述浮点问题,则GCC 7.2为两种表达式生成等效组件,并且使用优化 disabled 。因此,没有什么可担心的。他们俩都一样"快速"。
也是,如果smoothing
确实是恒定的,则表达式的结果也很恒定,并且不需要在环路的每一个迭代中重新计算。您可以简单地声明另一个常数变量,其值是表达式的结果。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 用于访问容器<T>数据成员的正确 API
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C++中的cin.ignore()函数不适用于整个流
- 没有用于初始化C++中的变量模板的匹配构造函数
- 用于C++中带有数组和指针的循环
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么它不适用于Visual 2019的原因
- 使用在用于SFINAE的void_t中具有参数的方法
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 重载==不适用于二进制树
- QWebView 用于在桌面应用程序中运行 javascript (D3) - 当 HTML 更改时重新加载速度很慢
- 大括号的作用域是否用于注释目的,从而降低C++代码的速度
- 优化一个简单的方程式,用于C 中的执行速度
- PID控制器,用于以速度精确行驶距离
- 用于写入顺序日志文件以提高速度的 mmap
- c++是否有一个默认的数据类,用于以合理的速度对基于索引的访问进行排序
- 可以将OpenGL用于我的QGraphicsItems加快在QGraphicsView中的显示速度