用二分法求解x=cos(x)

aozhi 2008-09-23 12:28:15
#include <stdio.h>
#include <math.h>

float countValue()
{
float x=0.0;
int n;
for(n=2;;n=n<<1)
{
if(cos(x)-x>1e-6)
{
x=x+1.0/n;
}
else if(x-cos(x)>1e-6)
{
x=x-1.0/n;
}
else
break;
}
return x;
}

int main(void)
{
printf("%f\n",countValue());
getch();
return 0;
}

二分法:结果0.739085,循环次数20

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

float countValue()
{
float x0,x1=0.0;
while(1)
{
x0=x1;
x1=cos(x0);
if(fabs(x0-x1)<1e-6)
break;
}
return x1;
}

int main(void)
{
printf("%f\n",countValue());
getch();
return 0;
}

普通迭代:结果0.739085,循环次数36
看来还是二分法好啊。

...全文
239 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
aozhi 2008-09-23
  • 打赏
  • 举报
回复
ls各位再见,上班去了。
aozhi 2008-09-23
  • 打赏
  • 举报
回复
主要是算法效率提高,语句效率关系没怎么变。
aozhi 2008-09-23
  • 打赏
  • 举报
回复
厚厚.8楼的意思是?
  • 打赏
  • 举报
回复
没看清楚,请无视我8楼的
  • 打赏
  • 举报
回复
else if(x-cos(x)>1e-6)

是不是不用if了????效率更高
aozhi 2008-09-23
  • 打赏
  • 举报
回复
谢谢吉尔.晚点给分,多秀会儿.呵呵.
  • 打赏
  • 举报
回复
没干嘛,打个招呼!~

嘿嘿!~要往测试方向发展,当然得整几个测试方面的朋友啊!!~

嘿嘿!~

代码很强!~
aozhi 2008-09-23
  • 打赏
  • 举报
回复
不要麻痹我.嘿嘿
有时间再搞个黄金分割版.呵呵
wangdeqie 2008-09-23
  • 打赏
  • 举报
回复
楼主好强啊,学习~~~~
luxiaoxun 2008-09-23
  • 打赏
  • 举报
回复
up
aozhi 2008-09-23
  • 打赏
  • 举报
回复
干嘛?
  • 打赏
  • 举报
回复
aozhi
zgjxwl 2008-09-23
  • 打赏
  • 举报
回复
=_=
aozhi 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wangdeqie 的回复:]
楼主好强啊,学习~~~~
[/Quote]

大家都别听他的,他才是高手。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧