如果在具有数字的除法中使用pow函数,如何避免整数溢出?

时间:2015-11-12 18:25:51

标签: c++ math integer-overflow arithmetic-expressions integer-arithmetic

我有以下声明。

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

在这里,

  • valal是与问题无关的变量。
  • 分子可以超过long long int范围。
  • 分母是分子的除数。

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

2 个答案:

答案 0 :(得分:0)

我现在没有时间写一个正确的答案;如果我有机会,我稍后会扩展它。基本思想是使用小学校算法,使用"数字"这是分母的力量。谷歌搜索" Schrage multiplication"或者查看here以获取参考资料。

答案 1 :(得分:0)

我希望操作数也是整数

  1. 我会通过平方而不是战争来使用权力

    请参阅Integer power by squaring

  2. 迭代#1

    每次展位子结果和分母可以被2除以它们,以保持动力结果小而不失精度或结果的正确性。所以每次subresult和Denominator的LSB位都为0时,右移两位。