(這可能是一個愚蠢的問題,但...)如何在Clojure中獲得精確的大數運算結果?
Common Lisp中,我可以這樣做
CL-USER> (expt 2 63)
9223372036854775808
我嘗試了Clojure的幾個備選方案:
user> (Math/pow 2 63)
9.223372036854776E18
顯然,強制到int
沒有工作:
user> (int (Math/pow 2 63))
IllegalArgumentException Value out of range for int: 9.223372036854776E18 clojure.lang.RT.intCast (RT.java:1211)
所以我試圖強迫到bigint
:
user> (bigint (Math/pow 2 63))
9223372036854776000N
...但是,這也不能工作。
建議如何獲得與上面相同的結果? (謝謝!)
謝謝!那麼'bigdec'比'bigint'更習慣嗎? (直覺上我會期望後者,因爲它位於'clojure.lang'命名空間) – agam
你得到一個帶'bigint'的'clojure.lang/BigInt',但是'bigdec'的'java.math/BigDecimal'。您可能會發現其中一個更方便,這取決於您對JDK的暴露程度。對於一個BigInteger(JDK所具有的功能),它已經比較笨拙了:'(.pow(java.math.BigInteger。「2」)63)' – cfrick