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