快速取幂:real ^ real(C++ MinGW,Code :: Blocks)

Art*_*miy 4 c++ floating-point exponentiation

我正在编写一个应用程序,在某个块中我需要对3*500*500次的实数进行取幂.当我使用exp(y*log(x))算法时,程序明显滞后.如果我使用基于数据类型的另一种算法,它会明显加快,但该算法不是很精确,虽然为模拟提供了不错的结果,但在速度方面仍然不完美.

对于比exp(y*log(x))更快的实际功率,是否有任何精确的取幂算法?

先感谢您.

Ste*_*non 5

如果你需要很好的准确性,并且你对先验的基数(x值)的分布一无所知,那么pow(x,y)是最好的便携式答案(在许多 - 不是所有 - 平台上,这将是比exp(y*log(x))快,并且在数值上也表现得更好.如果你确实知道x和y可以存在的范围,以及具有什么分布,那对于试图提供建议的人来说将是一个很大的帮助.

在保持良好准确性的同时更快地完成它的通常方法是使用一个库例程,该例程被设计为同时对x值的数组和y值的数组进行许多这些计算.问题在于,这样的库实现往往需要花钱(如英特尔的MKL)或者是特定于平台的(例如,OS X上的Accelerate.framework中的vvpowf).我对MinGW了解不多,所以其他人需要告诉你那里有什么.GSL可能有这些方面的东西.