代码之家  ›  专栏  ›  技术社区  ›  Flavius

预测阶乘溢出

  •  5
  • Flavius  · 技术社区  · 16 年前

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

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

    附录

    我想,给定一个位数(整数的宽度,以位为单位),我可以把I的值四舍五入到下一个2的幂,然后检测向左移动是否会超过位。但从算法上看,那会是什么样子呢?

    4 回复  |  直到 16 年前
        1
  •  9
  •   kennytm    16 年前

    替代提示:

    a * b ≤ MAX_INT 
    

    相当于

    a ≤ MAX_INT / b
    

    如果b>0

        2
  •  4
  •   swestrup    16 年前

    阶乘是一系列乘法,保存乘法结果所需的位数是两个被乘数的位数之和。因此,保持结果中使用了多少位的运行总数,以及保存要乘以的值所需的当前位数。当它大于剩余的位数时,就要溢出了。

        3
  •  2
  •   I. J. Kennedy ShankarSangoli    16 年前

    m = (n-1)! 你要乘以 n ,您可以通过检查

       m <= MAX_INT / n
    
        4
  •  1
  •   Aryabhatta Aryabhatta    16 年前

    你可以用 Stirling's Approximation formula 上面写着

    而且会非常准确。