因子超过170岁

时间:2010-11-22 20:01:29

标签: php factorial

每次我尝试获得171的阶乘,我得到INF。 170工作正常。是否有可能在脚本中获得171+的阶乘?怎么样? 我的功能:

function factorial($n) {
    if ($n == 0) return 1;
    return $n * factorial($n - 1);
}

6 个答案:

答案 0 :(得分:8)

如果您处理非常大的数字,则需要使用允许您执行此操作的扩展程序。

有BCMath(http://www.php.net/manual/en/book.bc.php)和GMP(http://www.php.net/manual/en/book.gmp.php)。

答案 1 :(得分:5)

您必须使用BC MathGNU MP扩展名。 PHP没有为高值或高精度操作提供任何工具OOTB。

答案 2 :(得分:3)

echo "1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000"

真的,你的功能很好。我认为PHP缺乏那种精确性。我在python

中得到了值(它是正确的顺便说一句)

答案 3 :(得分:3)

您可能获得的值超过了32位计算机(~10^308)中的最大双精度浮点数。 170!因子是~7.25741562 × 10^307,但是,171!更大您最好的选择是使用其中一个库EboMike或Crozin在他们的答案中推荐。

答案 4 :(得分:1)

这是一个比你用32位更大的数字。如果您在64位计算机上运行相同的代码,那么它应该可以工作。

答案 5 :(得分:1)

对于大n,你可以计算n!使用斯特林近似法很快就会出现小错误。看看这篇文章;它分析了函数和一些示例代码:

http://threebrothers.org/brendan/blog/stirlings-approximation-formula-clojure/