2012-09-07 77 views
1

我试图写我自己的纤维功能,适用于大数字(超过50),我没有运气。首先,我尝试了这个明显的解决方案,但这种解决方案很快就会出现。我的下一个解决方案是这样的SML斐波纳契大数

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

不幸的是,这也溢出。

回答

4

你需要看看IntInf module,它提供访问任意精度整数。

您可以使用IntInf.fromIntInt.int转换为IntInf.int

注意,因为你对他们做任何操作,你必须使用IntInf.<operation>代替Int对应。这包括添加和类似的东西。

+0

所以用IntInf替换“int”? – Katianie

0

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