gpt4 book ai didi

c - 我应该更改什么以便我的 arctan(x) 近似可以正确显示 x=1 和 x=-1?

转载 作者:行者123 更新时间:2023-11-30 19:03:50 33 4
gpt4 key购买 nike

我的 C 作业之一是编写 arctan(x) 的近似值在 C 语言中。我应该基于的方程是

arctan(x)=\sum {k=0}^{\infty }(-1)^{k} \tfrac{x^{2k+1}}{2k+1}

enter image description here

另外x仅定义为-1<=x<=1 .

这是我的代码。

#include <stdio.h>
#include <math.h>


double main(void) {

double x=1;
double k;
double sum;
double sum_old;
int count;

double pw(double y, double n) {
double i;
double number = 1;

for (i = 0; i < n; i++) {
number *= y;
}
return(number);
}

double fc (double y) {
double i;
double number = 1;

for (i = 1; i <= y; i++){
number *= i;
}
return(number);
}

if(x >= (-1) && x <= 1) {
for(k=0; sum!=sum_old; k++) {
sum_old = sum;
sum += pw((-1), k) * pw(x, (2*k) + 1)/((2*k) + 1);
count++;

printf("%d || %.17lf\n", count, sum);
}



printf("My result is: %.17lf\n",sum);
printf("atan(%f) is: %.17f\n", x, atan(x));
printf("My result minus atan(x) = %.17lf\n", sum - atan(x));
} else {
printf("x is not defined. Please choose an x in the intervall [-1, 1]\n");
}



return 0;
}

它似乎适用于每个值,除了值 1-1 。如果x=1 ,那么输出结束于:

...
7207 || 0.78543285189457468
7208 || 0.78536

而输出应该看起来更像这样。在本例中 x=0.5。

25 || 0.46364760900080587
26 || 0.46364760900080587
My result is: 0.46364760900080587
atan(0.500000) is: 0.46364760900080609
My result minus atan(x) atan(x) = -0.00000000000000022

如何改进我的代码,使其可以使用 x=1 运行和x=-1 .

提前致谢。

PS:我用的是我自己创建的pw()函数而不是 pow() ,因为我想绕过不使用 pow() 的限制因为我们的讲座中还没有这样的内容。

PPS:如果您提供有关如何改进我的代码的建议,我将不胜感激。

最佳答案

在每次迭代中,您添加 (-1)kx2k+ 1/(2k+1),当总和没有变化时停止。

如果这是用理想算术(精确、无限精确的算术)计算的,它永远不会因非零 x 而停止,因为你总是在改变总和。当使用固定精度算术进行计算时,当项太小时,由于精度有限,它不会改变总和,因此会停止。

当 |x|小于 1 任何显着的量,这很快就会发生,因为 x2k+1 变得更小。当 |x|是 1 时,该项就变成 1/(2k+1),它会非常缓慢地变小。直到 k 大约为 253 时,总和才会停止变化。

您可能会考虑将停止条件更改为 sumsum_old 相比没有发生太大变化,而不是根本没有变化。

关于c - 我应该更改什么以便我的 arctan(x) 近似可以正确显示 x=1 和 x=-1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53382349/

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