gpt4 book ai didi

c++ - 是否有一种快速算法计算能力是二分之一的倍数?

转载 作者:搜寻专家 更新时间:2023-10-31 00:16:42 25 4
gpt4 key购买 nike

我正在编写一个解决平面受限三体问题的程序。它的方程式如下。此函数计算位置和速度的导数并将它们写入数组。

valarray<double> force(double t, valarray<double> r)
{
valarray<double> f(dim);
valarray<double>r0(r-rb0);
valarray<double>r1(r-rb1);

f[0]= 2 * r[1] + r[2] - (1 - mu)*r0[2]/norm3(r0) - mu*r1[2]/norm3(r1);
f[1]= - 2 * r[0] + r[3] - mu*r0[3]/norm3(r0) - mu*r1[3]/norm3(r1);
f[2] = r[0];
f[3] = r[1];
return f;
}

double norm3(valarray<double> x)
{
return pow(x[2]*x[2]+x[3]*x[3],1.5);
}

所以我必须计算位置 vector 的平方,然后将其提高到 3/2 的幂。我认为这些操作占用了很大一部分计算时间。

现在我使用 math.h 的 pow 函数。有没有另一种更快的算法来计算这个功率?我尝试使用 fast inverse square root (稍后再对其进行立方)但它为我的目的提供的值(value)太不精确并且工作时间更长(可能是因为立方)。

谢谢!

最佳答案

一个简单的方法可能是尝试 x*sqrt(x),但要确定它的基准。

double norm3(valarray<double> x)
{
double result=x[2]*x[2]+x[3]*x[3];
result=result * sqrt(result);
return result;
}

关于c++ - 是否有一种快速算法计算能力是二分之一的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15309192/

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