【发布时间】:2017-03-08 14:35:19
【问题描述】:
在我的 Java 程序中,我必须经常计算 a^b,其中 a ≥ 0 和 0 ≤ b 。我对Math.pow(a, b)的速度不满意。有没有可能比Math.pow 更快的算法(以一定的准确性为代价)?
【问题讨论】:
-
可能是泰勒级数的较短部分 (stackoverflow.com/questions/4453421/…)?根据应用程序,缓存结果可能有用
-
如果可以使用
exp(b*log(a))或其基础 2 变体,您可能会获得更快的结果。这在某些情况下会产生明显的浮点错误,但避免了pow的更专业版本为减少这些错误而包含的开销。 -
你有更多关于这些 a 和 b 分布的信息吗?你可以预先计算表吗?难道没有一种解决方法可以避免计算这些幂的需要吗? ...更多上下文很有用。
-
您可以尝试以下方法。 y = a^b = (m * 2^e)^b = m ^b * 2^(eb) = m^b * 2^(eb - E) * 2^E其中,E = Nearlyint(eb) 和 |eb-E| link
标签: java math numerical-methods