C/C++ 中 pow() 函数的快速实现/近似

发布于 2024-08-23 13:07:51 字数 227 浏览 7 评论 0原文

我正在寻找更快的实现或 cmath 提供的函数的良好近似。

我需要加速以下函数

  1. pow(x,y)
  2. exp(z*pow(x,y))

其中 z<0x 来自 (-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

  1. pow(x,y)
  2. exp(z*pow(x,y))

where z<0. x is from (-1.0,1.0) and y is from (0.0, 5.0)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

时光磨忆 2024-08-30 13:07:51

以下是一些近似值:

如果上面的 pow 近似值不够好,您仍然可以尝试用指数函数替换它,具体取决于您的机器和编译器,这可能会更快:

  1. x^y = e^(y*ln(x))
  2. 结果: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:

  1. x^y = e^(y*ln(x))
  2. And the result: 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.

南风起 2024-08-30 13:07:51

x 和 y 的可能值是多少?
如果它们在合理的范围内,构建一些查找表可能会有所帮助。

What are the possible values of x and y?
If they are within reasonable bounds, building some lookup tables could help.

金橙橙 2024-08-30 13:07:51

我推荐书中的例程“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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文