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