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

新手上路,请多包涵

我正在寻找更快的实现或由 cmath 提供的功能的良好近似。

我需要加快以下功能

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

其中 z<0x 来自 (-1.0,1.0) 和 y 来自 (0.0, 5.0)

原文由 zoli2k 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 773
2 个回答

以下是一些近似值:

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

  1. x^y = e^(y*ln(x))
  2. 结果: e^(z * x^y) = e^(z * e^(y*ln(x)))

另一个技巧是当公式的某些参数不经常更改时。因此,如果例如 x 和 y 大部分是常数,您可以预先计算 x^y 并重用它。

原文由 martinus 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

原文由 Alex Jenter 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题