我正在寻找更快的实现或cmath
提供的函数的近似。
我需要加快以下功能
pow(x,y)
exp(z*pow(x,y))
其中z<0
。 x
来自(-1.0,1.0),y
来自(0.0,5.0)
答案 0 :(得分:6)
以下是一些评论:
如果pow的上述近似值不够好,您仍然可以尝试用指数函数替换它,具体取决于您的机器和编译器,这可能会更快:
x^y = e^(y*ln(x))
e^(z * x^y) = e^(z * e^(y*ln(x)))
另一个技巧是当公式的某些参数不经常改变时。如果是,例如x和y大多数是常数,你可以预先计算x ^ y并重复使用它。
答案 1 :(得分:4)
x和y的可能值是多少? 如果它们在合理的范围内,构建一些查找表可能会有所帮助。
答案 2 :(得分:1)
我推荐Jack W. Crenshaw的书"Math Toolkit for Real-Time Programming"中的例程。
您可能还想发布一些代码来展示您如何调用这些函数,因为可能还有一些其他更高级别的优化可能性,这些可能性从目前为止的描述中看不出来。