每次我尝试获得171的阶乘,我得到INF。 170工作正常。是否有可能在脚本中获得171+的阶乘?怎么样? 我的功能:
function factorial($n) {
if ($n == 0) return 1;
return $n * factorial($n - 1);
}
答案 0 :(得分:8)
如果您处理非常大的数字,则需要使用允许您执行此操作的扩展程序。
有BCMath(http://www.php.net/manual/en/book.bc.php)和GMP(http://www.php.net/manual/en/book.gmp.php)。
答案 1 :(得分:5)
答案 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/