用常数除数加速整数除法

时间:2015-09-12 22:35:23

标签: c++ c

我记得曾经读过一段时间,如果你用一个常数除以有一种方法可以将它变成乘法,因为模运算的属性。我一直在研究以下函数,它涉及使用相同的除数执行多个除法。我想知道我是否可以使用上面描述的速度加快速度。如果是这样究竟是怎么回事?

int ubi_div_i64(ubigint_t* a, ubi_i64_t b, ubi_i64_t* rem)
{
    if(b == 0)
        return UBI_MATH_ERR;

    ubi_i64_t r = 0;

    for(size_t i = a->used; i-- > 0;)
    {

        ubi_i64_t out;
        __asm__("\t"
                "div %[d] \n\t"
                : "=a"(out), "=d"(r)
                : "a"(a->data[i]), "d"(r), [d]"r"(b)
                : "cc");
        a->data[i] = out;
    }
    if(rem)
        *rem = r;

    return ubi_strip_leading_zeros(a);
}

注意:除数为64位,被除数为128位。

0 个答案:

没有答案