wjiouwrjh 2022-11-15 10:50 采纳率: 100%
浏览 78
已结题

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

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

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

第一个是错误答案

#include<bits/stdc++.h>
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 <stdio.h>
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

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

  • 写回答

1条回答 默认 最新

  • 云云豆酱 2022-11-15 14:14
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月30日
  • 已采纳回答 11月22日
  • 创建了问题 11月15日