C++实现sqrt

2023-11-09

1 题目

给定接口double sqrt(int x, double delta)请你实现开平方,其中x为底数,delta为最大误差

2 分析实现

  • 直觉—>二分法
  • 为了方便处理,将范围砍掉一半,认为0 =< x^0.5 - sqrt(x) < delta
  • 设计 递归 接口,设计递归基,递归逻辑
#include <iostream>
// #include <cstdlib>
// #include <vector>
// #include <algorithm>

using namespace std;

double f(double x, double delta, double begin, double end)
{
    double mid = (begin + end) / 2;
    if (x < mid * mid)
    {
        return f(x, delta, begin, mid);
    }
    else if (x >= (mid + delta) * (mid + delta))
    {
        return f(x, delta, mid, end);
    }
    else
    {
        return mid;
    } //对比这个递归 和 斐波那契的 递归
      //不同之处在于  此处 是单分支 递归  --->好递归
      //而 斐波那契 是多分支 递归 指数级增长   --->坏递归
}

double sqrt(int x, double delta)
{
    if (x < 0)
    {
        return -1;//简单地异常处理
    }
    //x是被开方数字,delta是最大允许误差
    //为了方便处理,姑且认为0 =< x^0.5 - sqrt(x) < delta
    //这相当于是 将 范围 限制得更严格 了
    double begin = 0, end = double(x);
    //因为x is a int ,so x^0.5 < x
    //开始 递归
    return f(double(x), delta, begin, end);
}

int main(int argc, char** argv)
{
    int x = 0;
    if(2 == argc){
        sscanf(argv[1],"%d",&x);
    }
    printf("%f\n",sqrt(x, 0.00000001));
        //printf和cout打印出来的位数并不同
    cout << sqrt(x, 0.00000001) << endl; 
    //这里 值得讨论的地方就是 delta精度取到多少以后,就没有意义了?
        //double的 内部结构 构成 浮点数 的 机制
    return 0;
}

3 值得深究的点

  • double的精度问题(float 阶码 移码 底数是怎么组成的 计算机组成原理)

  • 递归的 更高抽象层面 --> 多分支递归 vs 单分支 递归 --> 转换成为 迭代

  • printf与cout内部的打印位数不一致

  • 更高级的解法 (划线表示我已经掌握,未划线表示我还不懂)更高级解法的来自 公众号文章 从一道面试题谈谈一线大厂码农应该具备的基本能力

    • 最速下降法(梯度下降法)
    • 泰勒展开法
    • 牛顿迭代法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++实现sqrt 的相关文章

  • EventHandler 应该始终用于事件吗?

    我一直在愉快地使用自定义委托类型和通用编写事件Action委托类型 没有真正考虑我在做什么 我有一些很好的扩展助手Action and EventHandler这使我倾向于使用那些预定义的委托类型而不是我自己的委托类型 但除此之外 除了惯例
  • C# 和月历,选择多个日期

    我正在制作一个程序 可以帮助人们用 C 为某个部门 预订 订单 他们需要能够选择不同月份的多个日期 我更愿意拥有它 这样他们就可以单击一个日期 然后按住 Shift 键单击另一个日期以选择这两个日期之间的所有日期 并控制单击以进行单选 取消
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • C# Outlook 从收件人获取 CompanyName 属性

    我目前正在使用 C 编写 Outlook 2010 AddIn 我想要的是从我从 AppointmentItem 中提取的 Recipient 对象中获取 CompanyName 属性 因此 有了 AppointmentItem 的收件人
  • C++中的类要具备什么条件才能成为容器?

    我是 C 编程新手 偶然发现了这个术语containers举例如下vector deque map etc 一个企业的最低要求应该是什么class应该满足被称为container in C 我将从 范围 这个概念开始 Range 只有两个方
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • 以下 PLINQ 代码没有改进

    我没有看到使用以下代码的处理速度有任何改进 IEnumerable
  • 为什么 C# 中同一类型的隐式和显式运算符不能共存? [复制]

    这个问题在这里已经有答案了 为什么同一类中两个相同类型的运算符 显式和隐式 不能共存 假设我有以下内容 public class Fahrenheit public float Degrees get set public Fahrenhe
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程
  • 提升mapped_file_source、对齐方式和页面大小

    我正在尝试在性能很重要的上下文中解析一些大小高达几百兆字节的文本文件 因此我使用 boostmapped file source 解析器期望源以空字节终止 因此我想检查文件大小是否是页面大小的精确倍数 如果是 则使用较慢的非内存映射方法 我
  • 检测 TextBox 中的 Tab 键按下

    I am trying to detect the Tab key press in a TextBox I know that the Tab key does not trigger the KeyDown KeyUp or the K
  • 为什么 std::function 不是有效的模板参数,而函数指针却是?

    我已经定义了名为的类模板CallBackAtInit其唯一目的是在初始化时调用函数 构造函数 该函数在模板参数中指定 问题是模板不接受std function作为参数 但它们接受函数指针 为什么 这是我的代码 include
  • 编写具有多种类型的泛型扩展方法时的类型推断问题

    我正在为 IEnumerable 编写一个通用扩展方法 用于将对象列表映射到另一个映射对象列表 这就是我希望该方法的工作方式 IList
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • 解释这段代码的工作原理;子进程如何返回值以及在哪里返回值?

    我不明白子进程如何返回该值以及返回给谁 输出为 6 7 问题来源 http www cs utexas edu mwalfish classes s11 cs372h hw sol1 html http www cs utexas edu
  • 值和类型的简洁双向静态 1:1 映射

    我将从我想象如何使用我想要创建的代码开始 它不必完全像这样 但它是我在标题中所说的 简洁 的一个很好的例子 就我而言 它是将类型映射到相关的枚举值 struct bar foo
  • 使用 IdentityDbContext 和 Code First 自动迁移表位置和架构的实体框架?

    我正在尝试使用 IdentityDbContext 类设置自动迁移更新 并将更改传播到整个数据库的实际 DbContext 在进入代码之前 在使用自动迁移实现 IdentityDbContext 时 我收到此错误 影响迁移历史系统表位置的自
  • IDisposable 的显式实现

    虽然有很多关于IDisposable在 SO 上找到 我还没有找到答案 我通常遵循这样的做法 当我的一个班级拥有一个IDisposable对象然后它也实现IDisposable并打电话Dispose在拥有的对象上 然而最近我遇到了一个类 它

随机推荐

  • 软件架构之架构视图

    软件架构设计运用RUP4 1视图方法进行设计 4 1架构视图模型是1995年Philippe kruchen在 IEEE software 上发表的题为 The 4 1 View Model of Architecture 文 主要包括的架
  • Linux shell编程(三)shell脚本中的特殊变量详解

    1 环境变量 全局变量 环境变量一般使用export内置命令导出的变量 用于定义shell运行环境 保证shell命令能够正确执行 shell通过环境变量来确定登录的用户名等信息 所有的环境变量都是系统的全局变量 环境变量可以在命令行中创建
  • JMeter快速入门知识系列(12)----JMeter集合点

    12 1 集合点的定义 在性能测试过程中 为了真实模拟多个用户同时进行操作以度量服务器的处理能力 可以考虑同步虚拟用户以便恰好在同一时刻执行操作或发送请求 通过插入集合点可以较真实模拟多个用户并发操作 注意 虽然通过加入集合点可以约束请求同
  • Oracle为用户设置读权限

    Oracle 数据库中创建表只读用户 并为其设置密码永不过期 同义词 1 创建用户 create user test identified by 123456 default tablespace db temporary tablespa
  • Maven详细入门

    Maven 一 是什么 二 干什么 1 方便的依赖管理 2 统一的项目结构 3 标准的项目构建流程 三 怎么用 1 Maven坐标 2 依赖管理 2 1 依赖配置 2 2 依赖传递 2 3 依赖范围 2 4 生命周期 2 5 依赖原则 3
  • 利用cin.get()的特性实现输入的错误处理

    cin get读取数据cin get ch cin get读取字符串cin get 字符串名 长度 当括号内无参数时 读掉缓存取的一个数据 cin clear 重置错误输入标记 接受新的输入 如若cin位于测试条件中 则将被转换为bool类
  • 矩阵求导中的分母布局与分子布局

    最近在处理一些优化问题时 我才注意到 在不同的书籍 资料中函数 f x R n
  • Kubernetes轻量级日志工具Loki安装及踩坑记录

    Loki简介 Loki是Grafana出品的一个轻量级日志系统 熟悉ELK的都知道ELK使用起来的成本 而且仅仅是日志检索使用ELK的话有点大材小用了 Loki8技术栈中使用了以下组件 Promtail 用来将容器日志发送到 Loki 或者
  • Linux进程隐藏问题————显示隐藏进程

    阿里云云监控到有两台redis服务器CPU被某进程消耗400 cpu资源 系统查看Top 情况并未找到高消耗进程X7但CPU100 ni Netstat 查找到了一些异常请求 初步判断出组件被提权入侵了 尝试查找异常进程X7关联的文件 排查
  • 解决flutter showDialog下拉框,复选框等无法及时响应的问题

    使用StatefulBuilder showDialogr showDialog context context builder BuildContext ctx return StatefulBuilder builder BuildCo
  • Web Worker API

    Web Worker API Web Worker 使得在一个独立于 Web 应用程序主执行线程的后台线程中运行脚本操作成为可能 这样做的好处是可以在独立线程中执行费时的处理任务 使主线程 通常是 UI 线程 的运行不会被阻塞 放慢 Web
  • Kali 更换源(超详细,附国内优质镜像源地址)

    1 进入管理员下的控制台 2 输入密码后点击 授权 3 在控制台内输入下面的内容 vim etc apt sources list 4 敲击回车后会进入下面的页面 5 来到这个页面后的第一部是按键盘上的 i 键 左下角出现 插入 后说明操作
  • 使用APIKey定向加密对外接口案例

    使用API Key定向加密对外接口案例 整体思路 前端通过某种方式生成一个动态字段 例如时间戳 随机数 UUID 等 前端将动态字段和其他请求参数一起发送给后端 并对请求参数进行加密 后端通过相同的加密算法 使用动态字段生成 API KEY
  • Python解析库lxml与xpath用法总结

    本文主要围绕以xpath和lxml库进行展开 一 xpath 概念 xpath节点 xpath语法 xpath轴 xpath运算符 二 lxml的安装 lxml的使用 lxml案例 一 xpath 1 xpath概念 XPath 是一门在
  • 通用分页的详解(Java后端常用)

    目录 一 通用分页 1 1通用分页是什么 1 2使用通用分页有什么好处 1 3经常在哪使用通用分页 二 往常的通用分页实现及代码 三 通用分页的讲解 思路 具体实现代码 四 JUnit框架的使用 4 1JUnit框架是什么 4 2JUnit
  • 动态加载 JS 文件

    动态加载JS文件是指在网页运行过程中通过JavaScript代码向页面中动态添加外部JS文件 这种方式能够提高页面加载速度和用户体验 并且可以帮助网站实现更多的功能和特效 本文将详细介绍动态加载JS文件的基本原理 优势 注意事项以及具体实现
  • MySQL Workbench 报错 Cannot connect to Database Server

    MySQL Workbench是一款专为MySQL设计的ER 数据库建模工具 可以使用MySQL Workbench设计和创建新的数据库图示 建立数据库文档 以及进行复杂的MySQL迁移 MySQL Workbench是下一代的可视化数据库
  • lstm with attention_一文搞懂NLP中的Attention机制(附详细代码讲解)

    公众号关注 ML NLP 设为 星标 重磅干货 第一时间送达 机器学习算法与自然语言处理出品 公众号原创专栏作者 Don hub 单位 京东算法工程师 学校 帝国理工大学 Outline Intuition Analysis Pros Co
  • 细谈select函数(C语言)

    文章目录 1 介绍 2 例程 例程1 例程2 1 介绍 select 在socket编程中还是比较重要的 可是对于初学Socket的人来说都不太爱用Select写程序 他们只是习惯写诸如connect accept recv 或 recvf
  • C++实现sqrt

    1 题目 给定接口double sqrt int x double delta 请你实现开平方 其中x为底数 delta为最大误差 2 分析实现 直觉 gt 二分法 为了方便处理 将范围砍掉一半 认为0 lt x 0 5 sqrt x lt