我试图写我自己的纤维功能,适用于大数字(超过50),我没有运气。首先,我尝试了这个明显的解决方案,但这种解决方案很快就会出现。我的下一个解决方案是这样的SML斐波纳契大数
$fun fib(a:int, b:int, index:int) = if(index = 1) then
$ (a+b)
$ else
$ fib(b, (a+b), index - 1);
不幸的是,这也溢出。
我试图写我自己的纤维功能,适用于大数字(超过50),我没有运气。首先,我尝试了这个明显的解决方案,但这种解决方案很快就会出现。我的下一个解决方案是这样的SML斐波纳契大数
$fun fib(a:int, b:int, index:int) = if(index = 1) then
$ (a+b)
$ else
$ fib(b, (a+b), index - 1);
不幸的是,这也溢出。
你需要看看IntInf
module,它提供访问任意精度整数。
您可以使用IntInf.fromInt
从Int.int
转换为IntInf.int
。
注意,因为你对他们做任何操作,你必须使用IntInf.<operation>
代替Int
对应。这包括添加和类似的东西。
请注意,在Poly/ML中,默认情况下,结构Int和IntInf都提供无限(大)整数。由于该实现在底部使用GNU MP库,并且在仍然可能的范围内使用小型机器整数,所以它也相当快。
所以用IntInf替换“int”? – Katianie