SML斐波那契大数

时间:2012-09-07 22:23:13

标签: functional-programming sml smlnj ml

我试着编写我自己的fib函数,适用于大数(超过50)并且我没有运气。首先,我尝试了明显的解决方案,但这种方式很快就会出现问题。我的下一个解决方案就是这个

    $fun fib(a:int, b:int, index:int) = if(index = 1) then
    $                                      (a+b)
    $                                   else
    $                                       fib(b, (a+b), index - 1);

不幸的是,这也溢出了。

2 个答案:

答案 0 :(得分:4)

您需要查看IntInf module,它提供对任意精度整数的访问。

您可以使用Int.intIntInf.int转换为IntInf.fromInt

注意,对于您对其执行的任何操作,您必须使用IntInf.<operation>而不是Int对应的操作。这包括添加等等。

答案 1 :(得分:0)

请注意,在Poly / ML中,默认情况下,结构Int和IntInf都提供无界(大)整数。由于实现在底部使用GNU MP库,并且在可能的范围内使用小型机器整数,因此它也非常快。