Clojure で計算したいのです!1000
が、integer-overflow 例外を発生させずにこれを行うにはどうすればよいですか?
私の階乗コードは今です: (reduce * (range 1 1001))
.
Clojure で計算したいのです!1000
が、integer-overflow 例外を発生させずにこれを行うにはどうすればよいですか?
私の階乗コードは今です: (reduce * (range 1 1001))
.
*'
結果がオーバーフローした場合に備えて、結果をBigIntに自動的にプロモートすることにより、任意精度をサポートする演算子を使用できます。
(reduce *' (range 1 1001))
数値の末尾に N を付けて、bigint にします。
(reduce * (range 1N 1001N))
パラメータを強制してclojure.lang.BigInt
(reduce * (range (bigint 1) (bigint 1001)))
つまり、を使用しないサードパーティのライブラリを使用している場合*'
(defn factorial' [n]
(factorial (bigint n)))