クロージャで!1000
を計算したいが、どうすれば整数オーバーフローの例外が発生することなくこれを行うことができますか?Clojure - 大きい数値で計算する
私の階乗コードは今すぐ:(reduce * (range 1 1001))
です。
クロージャで!1000
を計算したいが、どうすれば整数オーバーフローの例外が発生することなくこれを行うことができますか?Clojure - 大きい数値で計算する
私の階乗コードは今すぐ:(reduce * (range 1 1001))
です。
あなたは自動的にそれがオーバーフローする場合のBigIntに結果を促進することにより、任意の精度をサポートしています*'
演算子使用することができます
(reduce *' (range 1 1001))
それBIGINTになり数の最後に置かN、
(reduce * (range 1N 1001N))
clojure.lang.BigInt
(reduce * (range (bigint 1) (bigint 1001)))
にパラメータを強制し0
I.e. *'
(defn factorial' [n]
(factorial (bigint n)))
ありがとう、サードパーティ製のライブラリを使用している場合それはもう少し簡単で清潔でした。 – Sawny
@ハムザの代わりにこのようにすることの長所と短所は何ですか? – Sawny
任意の入力を受け入れることができます。 @Hamzaは 'bigint'を使うべきです – noahlz