gpt4 book ai didi

clojure - 如何在 Clojure 中获得精确的大数算术结果?

转载 作者:行者123 更新时间:2023-12-02 18:29:51 27 4
gpt4 key购买 nike

(这可能是一个愚蠢的问题,但是......)

在 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

...但这也不起作用。

获得与上述相同结果的推荐方法是什么? (谢谢!)

最佳答案

您可以使用pow来自BigDecimal:

user=> (.pow (bigdec 2) 63)
9223372036854775808M

对于处理 bigdec/bigint Clojure,有带有尾随 ' 的“自动提升”计算函数(例如 *')。对于其他操作,Java 互操作始终是一个选项或第三方库,如 https://github.com/clojure/math.numeric-tower

关于clojure - 如何在 Clojure 中获得精确的大数算术结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39542865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com