咨询C++中各类基础运算的速度排序:加减乘除、模运算及数学函数
C++基础运算与数学函数性能参考
一、基础运算速度通用排序(从快到慢)
以下是通用硬件与编译器优化下的性能趋势,不同CPU架构可能有细微差异,但量级一致:
- 位运算(
<<、>>、&、|等):最快,硬件直接操作二进制,单周期完成 - 加法/减法:速度几乎无差异,均为单周期指令,性能持平
- 乘法:现代CPU已优化为几周期完成,远快于除法类运算
- 除法/取模:两者性能接近,取模通常依赖除法实现,属于多周期指令,比乘法慢1~2个数量级
二、数学函数的性能表现
三角函数(cos、tan)、对数函数(log、log10)等属于超越函数,性能远低于基础运算:
- 这类函数无硬件原生指令支持,依赖数学库的近似算法(泰勒展开、查表插值等)实现
- 单调用开销是基础运算的几十到上百倍,即便用AVX等向量指令集加速,依然远慢于基础运算
三、通用场景下的运算选择(以输入300、目标量级3为例)
若要得到量级为3的结果,优先选择低开销运算:
- 整数场景下,
300 / 100会被编译器优化为乘法+移位,性能接近乘法;如果是浮点数需求,300 * 0.01(浮点数乘法)也远快于除法/取模 - 对比
300 * 0.01和300 % 5:前者是乘法(或被优化为整数运算),后者是取模(依赖除法),可直接判定前者更高效,因为乘法的开销远低于除法类运算
四、可直接判定的低效运算
- 除法/取模:在可用乘法、位运算替代的场景下,属于相对低效的选择。比如判断奇偶用
x & 1替代x % 2,整数除以2用x >> 1替代x / 2 - 超越函数:除非业务必须,否则尽量用基础运算组合的近似方案替代(精度允许的前提下)
- 注意:现代编译器会自动将部分除法优化为乘法+移位,缩小性能差距,但从运算原生开销来看,除法依然属于低效范畴
内容的提问来源于stack exchange,提问作者Allure
相关产品推荐
相关产品推荐

