我们可以用C/C++中的左移位运算符来更快地将整数乘以2的幂.
但我们不能将左移运算符用于浮点数或双精度数,因为它们以不同的方式表示,具有指数分量和尾数分量.
我的问题是,
有什么办法吗?像左移运算符的整数更快地乘以浮点数?即使有2的幂?
小智 13
不,你不能.但是根据您的问题,您可以使用SIMD指令对几个压缩变量执行一次操作.阅读SSE2指令集.
http://en.wikipedia.org/wiki/SSE2
http://softpixel.com/~cwright/programming/simd/sse2.php
无论如何,如果您正在优化浮点乘法,那么在99%的情况下您会查找错误的位置.如果没有对过早优化进行大肆宣传,至少可以通过执行适当的分析来证明这一点.
你可以这样做:
float f = 5.0;
int* i = (int*)&f;
*i += 0x00800000;
Run Code Online (Sandbox Code Playgroud)
但你必须移动浮出寄存器,到内存中,然后再返回到一个不同的寄存器的开销,才得以冲回内存...约15个左右的周期更比,如果你只是做了fmul.当然,这是即使假设您的系统具有IEEE浮在所有.
不要试图优化这个.您应该查看程序的其余部分以查找算法优化,而不是尝试发现微优化浮点数等方法.它只会以鲜血和泪水结束.