Clojure - Calculate with big numbers

我与影子孤独终老i 提交于 2019-12-18 05:43:56

问题


I want to calculate !1000 in clojure, how can I do this without getting a integer-overflow exception?

My factorial code is right now: (reduce * (range 1 1001)).


回答1:


You could use the *' operator which supports arbitrary precision by automatically promoting the result to BigInt in case it would overflow:

(reduce *' (range 1 1001))



回答2:


Put N at the end of the number which makes it a bigint,

(reduce * (range 1N 1001N))



回答3:


Coerce the parameters to clojure.lang.BigInt

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

I.e. if you are working with an third-party library that doesn't use *'

(defn factorial' [n]
   (factorial (bigint n)))


来源:https://stackoverflow.com/questions/12826649/clojure-calculate-with-big-numbers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!