gpt4 book ai didi

c - 高效 10 次幂

转载 作者:行者123 更新时间:2023-12-03 23:59:17 28 4
gpt4 key购买 nike

我必须多次提高 10 的两倍。

有没有比使用数学库 pow(10,double) 更有效的方法?如果重要的话,我的 double 总是在 -5 到 -11 之间为负数。

我假设 pow(double,double) 使用比 pow(10,double) 所需的更通用的算法,因此可能不是最快的方法。鉴于下面的一些答案,这可能是一个不正确的假设。

至于为什么,是对数插值。我有一个 x 和 y 值的表。我的对象有一个已知的 x 值(几乎总是一个 double 值)。

double Dbeta(struct Data *diffusion, double per){
double frac;
while(per>diffusion->x[i]){
i++;
}
frac = (per-diffusion->x[i-1])/(diffusion->x[i]-diffusion->x[i-1]);
return pow(10,log10DB[i-1] + frac * (log10DB[i]-log10DB[i-1]));
}

这个函数被调用了很多次。我被告知要研究分析,所以这是我首先要做的。

刚刚有人告诉我,我可以使用自然对数而不是以 10 为底,这显然是正确的。 (我的愚蠢有时连我自己都感到惊讶。)

用自然对数替换所有内容后,一切都运行得更快了。通过 profiling(这是我今天学到的一个新词),我发现我 39% 的代码都花在了 exp 函数中,所以对于那些想知道这是否真的是我的代码瓶颈的部分的人来说,确实是这样。

最佳答案

对于 pow(10.0, n) 设置 c = log(10.0) 应该更快,你可以计算一次,然后使用 exp( c*n),它应该比 pow(10.0, n) 快得多(它基本上在内部做同样的事情,除了它会计算 log(10.0) 一遍又一遍,而不是一次)。除此之外,您可能无能为力。

关于c - 高效 10 次幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64477054/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com