首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速求幂:实数^实数(C++ MinGW,代码::块)

快速求幂:实数^实数(C++ MinGW,代码::块)
EN

Stack Overflow用户
提问于 2009-09-20 19:21:38
回答 2查看 1.4K关注 0票数 4

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

有没有比exp(y*log(x))更快的实幂的精确求幂算法?

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-20 19:31:56

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

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

票数 5
EN

Stack Overflow用户

发布于 2009-09-20 19:53:47

根据您的算法(特别是如果您只有很少甚至没有添加),有时您可以在日志空间中工作(至少部分地)。您可能已经考虑过这一点,但是如果中间表示是log_x和log_y,那么log(x^y) = exp(log_y) * log_x会更快。如果您甚至可以选择它,那么很明显,将log(x^y)计算为y* log_x更便宜。如果你能避免一些指数运算,你可能会获得更高的性能。如果有任何方法可以重写你必须在最里面的循环之外获得求幂操作的任何循环,这是相当肯定的性能优势。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1451780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档