预期因子溢出

时间:2010-06-06 21:50:24

标签: algorithm

我想知道在计算阶乘F时是否可以预测下一次迭代是否会产生整数溢出?

假设在每次迭代时我都有一个int I,最大值是MAX_INT。

这听起来像是家庭作业,我知道。不是。只是我问自己“愚蠢”的问题。

附录

我考虑到,给定多个BITS(整数可以采用的宽度,以位为单位),我可以将数字I向下舍入到下一个2的幂,并检测向左移位是否会超过BITS。但是算法怎么样呢?

4 个答案:

答案 0 :(得分:9)

替代提示:

a * b ≤ MAX_INT 

相当于

a ≤ MAX_INT / b

如果b> 0

答案 1 :(得分:4)

因子是一系列乘法,保持乘法结果所需的比特数是两个被乘数的比特之和。因此,保持运行总计中结果中使用了多少位,以及保持正在乘以的值所需的当前位数。当它大于剩余的位数时,您将要溢出。 / p>

答案 2 :(得分:2)

如果你到目前为止得到m = (n-1)!并且你将要乘以n,你可以通过检查

来防止溢出
   m <= MAX_INT / n

答案 3 :(得分:1)

您可以使用Stirling's Approximation formula来表示

ln(n!)= n * ln(n) - n + ln(2 * pi * n)/ 2 + O(1 / n)

并且非常准确。

你实际上并不需要尝试繁殖等等。当然,这并不能直接回答你的问题,但鉴于你只是好奇,希望这会有所帮助。