次のクロージャー計算は、大きな整数を使用しているにもかかわらずオーバーフローします。
(defn binomial-coefficient [n k]
(let [rprod (fn [a b] (reduce * (range a (inc b))))]
(/ (rprod (- n k -1) n) (rprod 1 k))))
(binomial-coefficient 100N 50N)
オーバーフローがどこで発生するかわかりませんでした。たとえば、実行rprod
自体はうまくいくようです。
注意: 二項係数コードはRosetta Codeから取得されました。