浮点数的二分

发布于 2020-02-19  126 次阅读


浮点数二分的终止条件

以精度位循环终止条件

while(r-l<eps)//其中eps是所需要的精度
{
    mid = (l+r)/2;
    ...
}

计算根号2的近似值。

(1)10^-5=0.00001
(2)为什么要$x^2$和2比较,因为x=$\sqrt{2}$,只有x和$\sqrt{2}$不停比较,最后当不符合精度要求时就能得出近似值了。
6A456A4ED8CC16D038248C811DC308E9.png

代码如下:

const double eps = 1e-5;
double f(double x)
{
    return x * x; //函数f(x)=x^2
}

double calSqrt()
{
    double left = 1, right = 2;
    double mid;
    while (right - left > eps) //当条件不满足精度条件时退出
    {
        mid = (right + left) / 2; //取left和right的中点
        if (f(mid) > 2)  //如果f(mid)在
            right = mid;
        else
            left = mid;
    }
    return mid;
}

如果把f(x)=$x^2$看成f(x)=$x^2$-2,则判断方向的if语句则改为f(mid)>0

代码如下:

const double eps = 1e-5;
double f(double x)
{
    return x * x - 2;
}

double calSqrt()
{
    ......
    while (right - left > eps)
    {
        ......
        if (f(mid) > 0)
        ......
    }
    return mid;
}

上述问题实际是这个问题的特例:给定一个定义在[L, R]上的单调函数f(x),求方程f(x) = 0 的根。

const double eps = 1e-5;
double f(double x)
{
    return ....;
}

double solve(double L, double R)
{
    double left = L, right = R; //[left,right]=[L,R]
    double mid;
    while (right - left > eps)
    {
        mid = (right + left) / 2;
        if (f(mid) > 0)
            right = mid;
        else
            left = mid;
    }
    return mid;
}

本文标题:《浮点数的二分》

本文链接:https://wnag.com.cn/882.html

特别声明:除特别标注,本站文章均为原创,本站文章原则上禁止转载,如确实要转载,请电联:wangyeuuu@qq.com,尊重他人劳动成果,谢过~


正因为有要好好实现的梦想,所以今天也要好好加油。