2分区浮力优化

Optimization of float power of 2 division

假设我想将 unsigned int 除以 2、4 或 8,等等。 AFAIK 编译器用移位替换了这种除法。

但是我可以期望不是将浮点数除以 128,而是从其指数部分减去 7 吗?

确保使用指数减法而不是浮点除法的最佳做法是什么?

如果您要乘以或除以一个常量,质量适中的编译器应该对其进行优化。在许多平台上,硬件乘法指令可能是最佳选择。

要乘(或除)2 的幂,std::ldexp(x, p)x 乘以 2p,其中 p 是一个 int (如果 p 被否定则除法)。我不希望在大多数平台上比简单乘法有多少好处,因为手动(软件)指数操作必须包括检查上溢和下溢,因此在大多数情况下,生成的指令序列不太可能比硬件乘法有所改进。