#include
#include
int main()
{
float a, x0, x1;
printf("请输入一个正数: ");
scanf("%f", &a);
x0 = a / 2;
x1 = (x0 + a / x0) / 2;
do
{
x0 = x1;
x1 = (x0 + a / x0) / 2;
} while (fabs(x0 - x1) >= 1e-5);
printf("[%f] 的平方根为 [%f]\n", a, x1);
return 0;
}
为什么x0=a/2
求平方根的值不就是对半取值么,比如4,那就是2*2
采用迭代法求解平方根时,迭代公式为x(n+1) = (x(n) + a/x(n))/2,其中a为被开方数,x(n)为第n次迭代的近似值。
而在选择初始近似值x(0)时,通常选择a/2作为初始值,这是因为平方根函数在x=a/2处具有单峰性质,也就是说,当x小于a/2时,平方根函数单调递增,当x大于a/2时,平方根函数单调递减。因此选择a/2作为初始值可以更快地逼近平方根。
不知道你这个问题是否已经解决, 如果还没有解决的话: