浮点数二分查找模板

14 篇文章 2 订阅

总体上,浮点数二分查找框架和定点数一样,前面有三篇文章介绍定点数相关二分查找。

1、标准二分查找模板。https://blog.csdn.net/justidle/article/details/104303389

2、标准二分查找左边界模板。https://blog.csdn.net/justidle/article/details/104304725

3、标准二分查找右边界模板。https://blog.csdn.net/justidle/article/details/104304742

这里就简单的介绍一下浮点数二分查找代码框架,其他方面的知识请参考上面三篇文章。

要点

总体上来说:三个变量(左边界、右边界、中间值) + 判断条件(右边界更新条件和左边界更新条件)+ 返回值。唯一要注意的就是这几个变量的类型要使用 double。

  • 循环条件: fabs(right-left)>eps
  • 使用二分: mid = (right + left)/2
  • 左边界更新:left = mid
  • 右边界更新: right = mid

关于精度eps

浮点数二分查找最坑的地方就在这个 eps 的定义。个人总结的 eps 定义总体原则如下:

1、eps 要足够大。否则答案精度可能不够。

2、可以参考题目要求的输出,将 eps 定义为输出精度的加两个数量级。例如题目输出是精确到小数点 4 位,那么我们可以如下定义:

const double eps = 1e-6;

不同点

和定点数的二分查找不同的地方有以下几个方面:

1、使用二分查找。

2、三个变量(左边界、右边界、中间值) 必须使用 double 类型。

3、查找循环条件不同。判断浮点数相等的方法和判断定点数相等方法是不一样的,一般我们定义一个精度范围 eps,两个浮点数之差的绝对值在 eps 之内,我们就认为这两个浮点数是相同的。

代码模板

C++

//校验函数
bool check(double x) {
    ...
}

//下面是主框架
double left = -1e6;//左边界。可以根据题目具体查找条件修改
double right = 1e6;//右边界。可以根据题目具体查找条件修改
double eps = 1e-9;//精度
double mid;//中值

while (fabs(right-left)>eps) {
    mid=(right+left)/2;
    ans = calc(mid);
    
    //使用mid计算
    if (check(mid)) {
        right = mid;
    } else {
        left = mid;
    }
}

//left就是最终的结果

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的老周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值