C语言编程的一个小细节,简单迭代方法求方程

来源:百度知道 编辑:UC知道 时间:2024/06/30 08:23:21
利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。
Xn+1=cos(Xn)
迭代步骤如下:
(1)取X1初值为0.0;
(2)X0=X1,把X1的值赋给X0;
(3)X1=cos(X0),求出一个新的X1;
(4)若X0-X1的绝对值小于0.000001,执行步骤(5),否则执行步骤(2);
(5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。
请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果输出到文件OUT17.DAT中。

有的书上的答案是:
#include <conio.h>
#include <math.h>
#include <stdio.h>
float countValue()
{
float x1=0.0,x0; /*???????*/
while(1)
{
x0=x1;
x1=cos(x0); /*???????*/
if(fabs(x0-x1)<0.000001)
break;
}
return x1;
}
void writeDat()
{
FILE *wf;
wf = fopen("OUT.DAT", "w");
fprintf(wf, "%f\n", countValue());
fclose(wf);
}
main()
{
printf("实根=%f\n", countValue());
printf("%f\n", cos(countValue()) - countValue());
writeDat();
}

我的问题

float和double不影响算法,只是取值范围和精度不一样,如果需要高精度和更大的取值范围,就用double吧

还是精度问题,这个要看,你要去求的解需要保留多少位啦,也就是题意啦。