1

多数(50を超える)で機能する独自のfib関数を作成しようとしましたが、うまくいきませんでした。最初に私は明白な解決策を試しましたが、それはすぐにオーバーフローします。私の次の解決策はこれでした

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

残念ながら、これもオーバーフローします。

4

2 に答える 2

4

任意精度の整数へのアクセスを提供するIntInfモジュールを確認する必要があります。

Int.intからをIntInf.int使用してに変換できますIntInf.fromInt

IntInf.<operation>それらに対して行う操作については、対応するものの代わりに使用する必要があることに注意してくださいInt。これには、足し算などが含まれます。

于 2012-09-07T22:36:19.880 に答える
0

Poly / MLでは、構造体IntとIntInfの両方が、デフォルトで無制限の(大きな)整数を提供することに注意してください。実装では、下部にあるGNU MPライブラリと、これがまだ可能な範囲の小さなマシン整数を使用するため、非常に高速です。

于 2013-03-01T15:35:32.600 に答える