【发布时间】:2012-10-10 19:12:55
【问题描述】:
我想在 clojure 中计算 !1000,如何在不出现整数溢出异常的情况下执行此操作?
我的阶乘代码现在是:(reduce * (range 1 1001))。
【问题讨论】:
标签: clojure overflow integer-overflow
我想在 clojure 中计算 !1000,如何在不出现整数溢出异常的情况下执行此操作?
我的阶乘代码现在是:(reduce * (range 1 1001))。
【问题讨论】:
标签: clojure overflow integer-overflow
您可以使用支持任意精度的*' 运算符,通过自动将结果提升到 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)))
【讨论】: