【发布时间】:2021-11-19 02:55:39
【问题描述】:
我当然知道 cmath(math.h) 中有一个很好的 pow() 函数,但没有触及 pow() 的背景什么是最快的数字幂次方法用我自己的双手?
【问题讨论】:
-
幂值是整数还是实数?
-
你可以从
pow(a, b) = exp(b * log(a))开始 -
您应该将
pow函数作为基准。然后,您可以将此基线与您的尝试进行比较。接下来,问问自己使用库函数是否值得重写。 -
如果您不能使用内置函数,那么将指数分解为 2 的幂是一个好方法。例如 7->1 + 2 + 4,你生成
x2 = x*x,x4 = x2*x2,然后得到x7 = x*x2*x4。我认为有一种更有效的方法(我认为仍在利用这一点)。现在,如果您可以得到sqrt,那么它可以扩展为处理浮点数。如果你在x86上,你通常也会有sqrt,因为它是cpu上的一条指令,我认为你不会跑赢。
标签: c++ algorithm mathematical-optimization