【发布时间】:2012-10-06 19:37:26
【问题描述】:
我经常注意到 gcc 将乘法转换为可执行文件中的移位。将int 和float 相乘时可能会发生类似的情况。例如,2 * f 可以简单地将f 的指数增加 1,从而节省一些周期。编译器,也许如果有人要求他们这样做(例如通过-ffast-math),一般会这样做吗?
编译器通常足够聪明来执行此操作,还是我需要使用scalb*() 或ldexp()/frexp() 函数族自己执行此操作?
【问题讨论】:
-
你的问题是什么?
-
问题是为什么编译器不将浮点乘以 2 转换为指数增量,就像整数和移位一样。
-
我知道它可以,但是一般编译器会这样做吗?他们已经足够聪明了吗?还是我需要自己做?
-
@user1095108: 我做了一个 ldexp/increment/freexp 的基准测试。至少在我的测试中(VC++ 和 gcc,在 x86 上),乘法快得多。
标签: c++ c performance optimization compiler-optimization