Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math Clojure中的任意精度求幂_Math_Clojure - Fatal编程技术网

Math Clojure中的任意精度求幂

Math Clojure中的任意精度求幂,math,clojure,Math,Clojure,在Clojure中是否有执行任意精度求幂的方法?我尝试了clojure.Math.numeric-tower中的Math/pow和expt函数,但两者都只能返回有限的精度。例如: (with-precision 100 (expt 2 1/2)) => 1.4142135623730951 user> (import '(org.apfloat Apfloat ApfloatMath)) org.apfloat.ApfloatMath user> (-> (Apflo

在Clojure中是否有执行任意精度求幂的方法?我尝试了clojure.Math.numeric-tower中的Math/pow和expt函数,但两者都只能返回有限的精度。例如:

(with-precision 100 (expt 2 1/2))
=> 1.4142135623730951
user> (import '(org.apfloat Apfloat ApfloatMath))
org.apfloat.ApfloatMath

user> (-> (Apfloat. 2M 100) (ApfloatMath/pow (Apfloat. 0.5M 100)))
1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727

如何获取更多数字?

math/expt
可能不是您要查找的函数,因为在此上下文中,它返回的是双精度而不是大十进制,因此会以精度忽略您的
语句:

如果基数为精确数且幂为整数,则返回精确数,否则返回双精度

的答案似乎涵盖了如何从BigDecimal指数中获得任意精度。BigDecimal似乎没有提供这种“现成的”

提供了快速的任意精度算法。如果您的项目附带Leiningen,您可以通过向
project.clj
文件添加以下依赖项信息来轻松使用它

[org.apfloat/apfloat "1.6.3"]
您可以使用Apfloat在Clojure中执行任意精度求幂。例如:

(with-precision 100 (expt 2 1/2))
=> 1.4142135623730951
user> (import '(org.apfloat Apfloat ApfloatMath))
org.apfloat.ApfloatMath

user> (-> (Apfloat. 2M 100) (ApfloatMath/pow (Apfloat. 0.5M 100)))
1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727

你要多少位数
sqrt(2)
不能表示为有理数(两个有限数的分数)。你想要一个懒散的数字列表吗?我试图通过使用“精确”来获得100个数字,但正如你所看到的那样,没有任何效果。答案是:我想指定精度。expt函数接受bigdec参数,但只返回有限的精度结果。在这种情况下,OP要查找的函数是什么?