pow函数除以数字时如何避免整数溢出?

How to avoid integer overflow in case of pow function in division with a number?

我有以下声明。

d = (pow(a,2*l+1)+1)/(val+1);  

这里,

但最终答案d肯定会在long long int范围内。如何在不损失准确性的情况下计算 d?我更喜欢不将它们转换为数组并使用小学乘法和除法的答案。

我现在没有时间写正确的答案;如果有机会,我稍后会扩展它。基本思想是使用小学算法,使用 "digits" 作为分母的幂。 Google 搜索 "Schrage multiplication" 或查找 here 参考资料。

希望操作数也是整数

  1. 我会通过平方而不是 pow 来使用幂[=2​​6=]

  2. 同时迭代 #1

    每次 booth 的子结果和分母都被 2 整除,以保持 pow 结果较小并且不损失精度或结果的正确性。所以每次子结果和分母的LSB位都是零右移1位。