如何在Perl中计算双因子?

时间:2009-01-06 12:45:12

标签: perl bignum

鉴于维基百科对Double Factorial的讨论,有人可以建议我在哪里找到Perl的bignum版本,或者建议如何编写它?

5 个答案:

答案 0 :(得分:3)

Perl将处理你的C编译器可以处理的任何内容,对于你应该使用Math::BigInt的更大的东西。

我建议你阅读perlnumber

双因子(perl golf)的定义:

sub f{$_[0]&&$_[0]>=2?$_[0]*f($_[0]-2):1}

答案 1 :(得分:2)

以下是实施Fast Factorial Functions的许多替代方法。穷人的算法对你来说可能是一个不错的选择,因为它不使用Big-Integer库,可以用任何计算机语言轻松实现,甚至快达10000!

转换为Perl留作OP的练习: - )

答案 2 :(得分:1)

Perl 5.8及更高版本附带bignum包。只需使用它你的脚本,它将负责其余的事情:

use bignum;

当我在“分析”一章中使用阶乘时,我在Mastering Perl中谈了这个。

答案 3 :(得分:1)

虽然dsm的答案是准确的,但无论你是否使用dsm的算法(不管是否是高尔夫球),真实计算Perl中的阶乘的方法都是 memoize 它。如果您打算以任何频率调用它,您将需要记住任何递归数学函数。

use Memoize;
memoize( 'fact2' );

sub fact2 {$_[0]&&$_[0]>=2?$_[0]*fact2($_[0]-2):1}

答案 4 :(得分:0)

如果使用(双)阶乘进行浮点计算,则可以快速进入上溢或下溢情况。通常最好使用对数。增加和减去因子的对数然后在最后采用指数比直接乘法和除因子更可靠。更多详情here