在C / C ++中快速实现/逼近pow()函数

时间:2010-02-27 11:27:20

标签: c++ c math gcc numeric

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

我需要加快以下功能

  1. pow(x,y)
  2. exp(z*pow(x,y))
  3. 其中z<0x来自(-1.0,1.0),y来自(0.0,5.0)

3 个答案:

答案 0 :(得分:6)

以下是一些评论:

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

  1. x^y = e^(y*ln(x))
  2. 结果:e^(z * x^y) = e^(z * e^(y*ln(x)))
  3. 另一个技巧是当公式的某些参数不经常改变时。如果是,例如x和y大多数是常数,你可以预先计算x ^ y并重复使用它。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

我推荐Jack W. Crenshaw的书"Math Toolkit for Real-Time Programming"中的例程。

您可能还想发布一些代码来展示您如何调用这些函数,因为可能还有一些其他更高级别的优化可能性,这些可能性从目前为止的描述中看不出来。