Posted on 2006-06-13 12:08
魔のkyo 阅读(246)
评论(0) 编辑 收藏 引用 所属分类:
Programming
#include
<
iostream
>
using
namespace
std;
namespace
sqrt_nsp{
double
n;
double
sqrt_iter(
double
x){
return
(x
+
sqrt_nsp::n
/
x)
/
2
;
}
}
/*
------迭代法------
前置条件
x=g(x)是f(x)=0的迭代函数
1)存在区间[a,b],使当x属于[a, b]时,g(x)属于[a, b]
2)|g'(x)|恒小于1
3)x0属于[a,b]
后置条件
返回f(x)=0在[a,b]上的根
*/
double
iter_algo(
double
(
*
g)(
double
),
double
x0)
{
double
t
=
g(x0);
while
(t
-
x0
>
1e
-
6
||
t
-
x0
<-
1e
-
6
){
x0
=
t;
t
=
g(x0);
}
return
t;
}
int
main ()
{
sqrt_nsp::n
=
2
;
printf(
"
%lf\n
"
,iter_algo(
&
sqrt_nsp::sqrt_iter,
1
));
}
发觉库函数abs()丢失精度丢失的厉害。一开始iter_algo函数中while循环的条件是用abs表示的,输出结果的精度总是不够