我经常注意到gcc在可执行文件中将乘法转换为移位。当将int和float相乘时,可能会发生类似的情况。例如,2 * f可以简单地将f的指数递增1,从而节省一些周期。编译器,也许如果有人要求他们这样做(例如,通过-ffast-math),通常会这样做吗?
编译器通常是否足够智能来完成这项工作,或者我是否需要使用scalb*()或ldexp()/frexp()函数族自己完成这项工作?
发布于 2012-10-17 10:52:47
对于嵌入式系统编译器来说,具有特殊的2的幂的缩放伪操作可能是有用的,该伪操作可以由代码生成器以对所讨论的机器最优的任何方式进行翻译,因为在一些专注于指数的嵌入式处理器上可能比进行完全的2次方乘法快一个数量级,但是在乘法最慢的嵌入式微处理器上,编译器可能可以通过让浮点乘法例程在运行时检查其参数以跳过尾数中为零的部分来实现更大的性能提升。
https://stackoverflow.com/questions/12919184
复制相似问题