c/c++语言开发共享Clang互惠1次优化

在与同事讨论之后,我最终测试了是否clang如果将两个分区(相当于1)优化为单个分​​区。

const float x = a / b; //x not used elsewhere const float y = 1 / x;

理论上clang可以优化到const float y = b / a如果x仅用作临时步长值,不是吗?

这是一个简单测试用例的输入和输出: https : //gist.github.com/Jiboo/d6e839084841d39e5ab6 (在两个输出中你可以看到它正在执行两个部分,而不是优化)

这个相关的问题是我理解的背后,似乎只关注为什么没有使用特定的指令,而在我的情况下,它是未完成的优化: 为什么GCC或Clang在快速使用时不能优化1指令的倒数-数学

谢谢,JB。

    不,铿锵不能那样做。

    但首先,你为什么要使用浮动? float有六位精度,double有15位。除非你有充分的理由,你可以解释一下,使用double。

    浮点运算中的1 /(a / b)与b / a不同。 编译器必须做的是第一种情况:

    在第二种情况:

    如果结果保证相同,编译器只能更改代码,如果编译器编写器无法生成结果相同的数学certificate,则编译器无法更改代码。 在第一种情况下有两个舍入操作,舍入不同的数字,因此不可能保证结果相同。

    编译器不像数学家那样思考。 如果你认为简化表达式在数学上是微不足道的,那么编译器还有很多其他需要考虑的事情。 实际上,编译器很可能比程序员更聪明,而且对C标准的了解也更多。

    像这样的东西可能是通过优化编译器的“思想”:

    等等。 有很多考虑因素。 你最终得到的机器代码很难提前预测。 只要知道编译器遵循你的指示信。

      以上就是c/c++开发分享Clang互惠1次优化相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544706.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐