我有一个程序可以根据泰勒级数计算反正弦值的近似值。
我和我的朋友想出了一个算法,它能够返回几乎“正确”的值,但我认为我们做得不是很清楚。看一看:
double my_asin(double x)
{
double a = 0;
int i = 0;
double sum = 0;
a = x;
for(i = 1; i < 23500; i++)
{
sum += a;
a = next(a, x, i);
}
}
double next(double a, double x, int i)
{
return a*((my_pow(2*i-1, 2)) / ((2*i)*(2*i+1)*my_pow(x, 2)));
}
我检查了 my_pow 是否正常工作,所以我也不需要在这里发布它。基本上,一旦当前项和下一项之间的差异大于或等于我的 EPSILON (0.00001),我希望循环结束,这是我在计算平方根时使用的精度。
这就是我希望它的工作方式:
while(my_abs(prev_term - next_term) >= EPSILON)
但是函数double next取决于i,所以我想我也必须在 while 语句中增加它。有什么想法我应该怎么做?
-1 的示例输出:
$ -1.5675516116e+00
代替:
$ -1.5707963268e+00
非常感谢你们。