aga*_*gam 2 clojure common-lisp
(这可能是一个愚蠢的问题,但......)
在Common Lisp中,我可以做类似的事情
CL-USER> (expt 2 63)
9223372036854775808
Run Code Online (Sandbox Code Playgroud)
我为Clojure尝试了一些替代方案:
user> (Math/pow 2 63)
9.223372036854776E18
Run Code Online (Sandbox Code Playgroud)
显然,胁迫int不起作用:
user> (int (Math/pow 2 63))
IllegalArgumentException Value out of range for int: 9.223372036854776E18 clojure.lang.RT.intCast (RT.java:1211)
Run Code Online (Sandbox Code Playgroud)
所以我试着强迫bigint:
user> (bigint (Math/pow 2 63))
9223372036854776000N
Run Code Online (Sandbox Code Playgroud)
......但那也没有用.
获得与上述相同结果的推荐方法是什么?(谢谢!)
您可以使用powfrom BigDecimal:
user=> (.pow (bigdec 2) 63)
9223372036854775808M
Run Code Online (Sandbox Code Playgroud)
至于处理bigdec/bigint Clojure,有一个带有尾随'(例如*')的"自动提升"计算功能.对于其他操作,Java interop始终是一个选项或第三方库,如https://github.com/clojure/math.numeric-tower
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |