前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浮点数的二分

浮点数的二分

作者头像
可定
发布2020-04-20 15:10:11
4550
发布2020-04-20 15:10:11
举报
文章被收录于专栏:细嗅蔷薇细嗅蔷薇

浮点数二分的终止条件

以精度位循环终止条件

代码语言:javascript
复制
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} 不停比较,最后当不符合精度要求时就能得出近似值了。

代码如下:

代码语言:javascript
复制
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。

代码如下:

代码语言:javascript
复制
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 的根。

代码语言:javascript
复制
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;
}

版权所有:可定博客 © WNAG.COM.CN

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

本文链接:https://cloud.tencent.com/developer/article/1616931

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 浮点数二分的终止条件
  • 计算根号2的近似值。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档