我有一段代碼被執行了很多,我想優化。它看起來像這樣:快速雙向移位?
int exponent;
uint32_t mantissa;
if (exponent < 0) {
return mantissa << -exponent;
} else {
return mantissa >> exponent;
}
它的目的是很清楚的,它應該右移mantissa
由exponent
的地方,在那裏exponent
可以是負數。
有更快的方式來編碼(如果可能,沒有分支)嗎?
我可能還有其他一些有趣的信息,'mantissa'是一個23位的整數,指數的範圍是[-127,+ 128]。 (是的,IEEE 754 :))。 – orlp 2012-04-22 22:03:12
+1:聰明。我猜想,在最大本地類型也是64位長的機器上,尾數較大(64位)的情況並不存在類似的技巧。 – 2012-04-22 22:08:13