C/C++ 中 pow() 函数的快速实现/近似
我正在寻找更快的实现或 cmath 提供的函数的良好近似。
我需要加速以下函数
pow(x,y)
exp(z*pow(x,y))
其中 z<0
。 x
来自 (-1.0,1.0),y
来自 (0.0, 5.0)
I m looking for a faster implementation or good a approximation of functions provided by cmath
.
I need to speed up the following functions
pow(x,y)
exp(z*pow(x,y))
where z<0
. x
is from (-1.0,1.0) and y
is from (0.0, 5.0)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
以下是一些近似值:
如果上面的 pow 近似值不够好,您仍然可以尝试用指数函数替换它,具体取决于您的机器和编译器,这可能会更快:
x^y = e^(y*ln(x))
e^(z * x^y) = e^(z * e^(y*ln(x)))
另一个技巧是当公式的某些参数不要经常改变。因此,如果 x 和 y 大部分是常数,您可以预先计算 x^y 并重用它。
Here are some approxmiations:
If the above approximation for pow is not good enough, you can still try to replace it with exponential functions, depending on your machine and compiler this might be faster:
x^y = e^(y*ln(x))
e^(z * x^y) = e^(z * e^(y*ln(x)))
Another trick is when some parameters of the formula do not change often. So if e.g. x and y are mostly constant, you can precalculate x^y and reuse this.
x 和 y 的可能值是多少?
如果它们在合理的范围内,构建一些查找表可能会有所帮助。
What are the possible values of x and y?
If they are within reasonable bounds, building some lookup tables could help.
我推荐书中的例程“Math Toolkit for Real-Time Planning”作者:杰克·W·克伦肖。
您可能还想发布一些代码来显示如何调用这些函数,因为可能还有一些其他更高级别的优化可能性,从目前给出的描述中并不明显。
I recommend the routines in the book "Math Toolkit for Real-Time Programming" by Jack W. Crenshaw.
You might also want to post some of your code to show how you are calling these functions, as there may be some other higher level optimisation possibilities that are not apparent from the description given so far.