Clojure中任意精度取幂

Lee*_*ips 9 math clojure

有没有办法在Clojure中执行任意精度求幂?我已经尝试过数学/战俘以及来自clojure.math.numeric-tower的expt函数,但两者都只会返回有限的精度.例如:

(with-precision 100 (expt 2 1/2))
=> 1.4142135623730951
Run Code Online (Sandbox Code Playgroud)

如何获得更多数字?

tno*_*oda 4

Apfloat for Java提供快速的任意精度算术。project.clj如果您的项目附带 Leiningen,您可以通过将以下依赖项信息添加到您的文件中轻松使用它。

[org.apfloat/apfloat "1.6.3"]
Run Code Online (Sandbox Code Playgroud)

您可以使用 Apfloat 在 Clojure 中执行任意精度求幂。例如:

user> (import '(org.apfloat Apfloat ApfloatMath))
org.apfloat.ApfloatMath

user> (-> (Apfloat. 2M 100) (ApfloatMath/pow (Apfloat. 0.5M 100)))
1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727
Run Code Online (Sandbox Code Playgroud)