我必须多次将 10 提高到两倍的幂。
有没有比使用数学库更有效的方法来做到这一点pow(10,double)?如果重要的话,我的双打总是在 -5 到 -11 之间为负。
我假设 pow(double,double) 使用比 pow(10,double) 所需的更通用的算法,因此可能不是最快的方法。鉴于下面的一些答案,这可能是一个不正确的假设。
至于为什么,是对数插值。我有一个 x 和 y 值表。我的对象有一个已知的 x 值(几乎总是双精度值)。
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]));
}
Run Code Online (Sandbox Code Playgroud)
这个函数被调用了很多次。我被告知要研究分析,所以这就是我首先要做的。
我刚刚被告知我可以使用自然对数代替以 10 为底的,这显然是正确的。(我的愚蠢有时甚至让我自己感到惊讶。)
用自然对数替换所有内容后,一切都运行得更快了。通过分析(这是我今天学到的一个新词),我发现 39% 的代码都用在了 exp 函数中,所以对于那些想知道这部分是否真的阻碍了我的代码的人来说,它是。