【发布时间】:2010-01-24 18:05:15
【问题描述】:
我尝试使用标准迭代算法来计算第 n 个根。
例如 (111^123)^(1/123)。
标准算法计算基数的高次幂 (在本例中为 111^123),这需要很长时间。算法在这里给出http://en.wikipedia.org/wiki/Nth_root_algorithm
但是,我注意到使用 double 执行相同的操作不到一毫秒。所以很明显他们使用了一些聪明的想法。对此有何提示?
【问题讨论】:
-
有人有什么好主意吗?我尝试了以下。为了计算
a^(1/x)和x整数的大a, x,我计算了一个随机的b使得b^x < a但b^(x+1)>a。让c=a/b^x。我计算了a^(1/x) = (a*b^x/(b^x))^(1/x) = c^(1/x)*b。我希望通过保持基数c小,我可以获得一些时间。不幸的是,如果我保持除法的比例很小,我会在计算c^(1/x)时得到除以零错误,或者如果我保持这个比例很大,则计算时间会很长。所以这不买任何东西。 -
通过使 b 更小,我得到了一些改进(从几小时到几分钟)。即
b^x<a < b^(x+sqrt(x))。几分钟的时间还不够短。
标签: java root bigdecimal