C / C++ 中有符号整数除法的快速下限

2023-12-29

在 C 中可以进行楼层划分,例如:

int floor_div(int a, int b) {
    int d = a / b;
    if (a < 0 != b < 0) {  /* negative output (check inputs since 'd' isn't floored) */
        if (d * a != b) {  /* avoid modulo, use multiply instead */
            d -= 1;        /* floor */
        }
    }
    return d;
}

但这似乎可以简化。

在 C 中是否有更有效的方法来做到这一点?


请注意,这几乎与这个问题相反:C / C++ 中整数除法的快速上限 https://stackoverflow.com/questions/2745074/fast-ceiling-of-an-integer-division-in-c-c


我认为生成的代码中的汇编指令更少,并且更快的结果路径。

对于具有大量寄存器的 RISC 机器来说,这种方法更好,因为根本没有分支,并且有利于管道和缓存。

对于 x86 实际上这并不重要。

int floor_div3(int a, int b) {
    int d = a / b;


    return d * b == a ? d : d - ((a < 0) ^ (b < 0));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C / C++ 中有符号整数除法的快速下限 的相关文章

随机推荐