XDOJ迭代法求根,两种方法有什么不一样的吗

XDOJ迭代法求根
题目:迭代法求根(1)
时间限制:1S
内存限制:10000Kb
问题描述:
用迭代法求 ,求平方根的迭代公式为

要求前后两次求出的x的差的绝对值小于 。
输入说明:
输入浮点数a。
输出说明:
输出一个浮点数x,小数点后保留5位小数。
输入样例:
3
输出样例:
1.73205

第一个是错误答案

#include
using namespace std;
int main(){
    double a,x1=1,x2=0;
    scanf("%lf",&a);
    while(fabs(x2-x1)>=0.00001){
        x2=(x1+a/x1)/2;
        x1=x2;
    }
    printf("%.5lf\n",x2);
    return 0;

}

下面是正确的代码


#include 
int main()
{
    double a,x,t;
    scanf("%lf",&a);
    t=a;
    x=(a+1)/2;
     while(t-x>=0.00001)
     {
         t=x;
         x=(x+a/x)*0.5;
     }
     printf("%.5lf",x);
    return 0;
}

这是第一份代码错误的结果

img

两个代码有什么区别吗,精度问题?

整数与整数相除只能得到整数,要想保留小数,就必须把一个数改成小数,这里把2改成2.0应该就行了。