迭代法计算平方根(难度系数:2颗星)

来源:互联网 发布:google pixel手机 知乎 编辑:程序博客网 时间:2024/05/18 23:55

输入1个正数,求其平方根(不能使用sqrt库函数)

PS:参考代码中给出了两种迭代方式进行比较:1. 公式迭代 2. 二分迭代
参考代码:

#include <stdio.h>double GetAbsoluteValue(double num){    return num > 0 ? num : -num;}double GetSqrt2(double num){    //此题进行一下扩展,原题是输入正整数,为了更加通用,改成输入一个正数    //对整个结果空间进行二分搜索    const double eps = 1e-13;//定义结果的精度    double low, high, res;    if (num < 1)//这里要考虑一下正数小于1的情况,二分的初值范围    {        low = num;        high = 1;    }    else    {        low = 0;        high = num;    }    res = (low + high) / 2;    while (GetAbsoluteValue(res * res - num) >= eps)    {        double dd = GetAbsoluteValue(res * res - num);        if (res * res < num)            low = res;        else            high = res;        res = (low + high) / 2;    }    return res;}double GetSqrt(double num){    //此题进行一下扩展,原题是输入正整数,为了更加通用,改成输入一个正数    const double eps = 1e-11;//定义结果的精度    double x = 0, y = num / 2;    while (GetAbsoluteValue(y - x) >= eps)    {        x = y;        y = (x + num / x) / 2;    }    return x;}int main(){    double num;    scanf_s("%lf", &num);    printf("------------------------------方法1:----------------------------------------\n");    printf("sqrt(%lf)=%.6lf\n", num, GetSqrt(num));    printf("\n");    printf("------------------------------方法2:----------------------------------------\n");    printf("sqrt(%lf)=%.6lf\n", num, GetSqrt2(num));    return 0;}

运行结果:
这里写图片描述

这里写图片描述

这里写图片描述

4 0