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);
这里,
val
、a
和l
是与问题无关的变量。
- 分子可以超出 long long int 范围。
- 分母是分子的约数。
但最终答案d肯定会在long long
int范围内。如何在不损失准确性的情况下计算 d
?我更喜欢不将它们转换为数组并使用小学乘法和除法的答案。
我现在没有时间写正确的答案;如果有机会,我稍后会扩展它。基本思想是使用小学算法,使用 "digits" 作为分母的幂。 Google 搜索 "Schrage multiplication" 或查找 here 参考资料。
希望操作数也是整数
我会通过平方而不是 pow 来使用幂[=26=]
见
同时迭代 #1
每次 booth 的子结果和分母都被 2 整除,以保持 pow 结果较小并且不损失精度或结果的正确性。所以每次子结果和分母的LSB位都是零右移1位。
我有以下声明。
d = (pow(a,2*l+1)+1)/(val+1);
这里,
val
、a
和l
是与问题无关的变量。- 分子可以超出 long long int 范围。
- 分母是分子的约数。
但最终答案d肯定会在long long
int范围内。如何在不损失准确性的情况下计算 d
?我更喜欢不将它们转换为数组并使用小学乘法和除法的答案。
我现在没有时间写正确的答案;如果有机会,我稍后会扩展它。基本思想是使用小学算法,使用 "digits" 作为分母的幂。 Google 搜索 "Schrage multiplication" 或查找 here 参考资料。
希望操作数也是整数
我会通过平方而不是 pow 来使用幂[=26=]
见
同时迭代 #1
每次 booth 的子结果和分母都被 2 整除,以保持 pow 结果较小并且不损失精度或结果的正确性。所以每次子结果和分母的LSB位都是零右移1位。