我试着编写我自己的fib函数,适用于大数(超过50)并且我没有运气。首先,我尝试了明显的解决方案,但这种方式很快就会出现问题。我的下一个解决方案就是这个
$fun fib(a:int, b:int, index:int) = if(index = 1) then
$ (a+b)
$ else
$ fib(b, (a+b), index - 1);
不幸的是,这也溢出了。
答案 0 :(得分:4)
您需要查看IntInf
module,它提供对任意精度整数的访问。
您可以使用Int.int
从IntInf.int
转换为IntInf.fromInt
。
注意,对于您对其执行的任何操作,您必须使用IntInf.<operation>
而不是Int
对应的操作。这包括添加等等。
答案 1 :(得分:0)
请注意,在Poly / ML中,默认情况下,结构Int和IntInf都提供无界(大)整数。由于实现在底部使用GNU MP库,并且在可能的范围内使用小型机器整数,因此它也非常快。