12

Clojure で計算したいのです!1000が、integer-overflow 例外を発生させずにこれを行うにはどうすればよいですか?

私の階乗コードは今です: (reduce * (range 1 1001)).

4

3 に答える 3

23

*'結果がオーバーフローした場合に備えて、結果をBigIntに自動的にプロモートすることにより、任意精度をサポートする演算子を使用できます。

(reduce *' (range 1 1001))
于 2012-10-10T19:29:16.247 に答える
6

数値の末尾に N を付けて、bigint にします。

(reduce * (range 1N 1001N))
于 2012-10-10T19:24:24.350 に答える
2

パラメータを強制してclojure.lang.BigInt

(reduce * (range (bigint 1) (bigint 1001)))

つまり、を使用しないサードパーティのライブラリを使用している場合*'

(defn factorial' [n]
   (factorial (bigint n)))
于 2012-10-10T19:59:16.167 に答える