当前位置: 首页 > news >正文

美团面试手撕:手动实现开方函数math.sqrt(x)

题目

手动实现math.sqrt(x),保留两位小数,不允许调库实现

解答

这个代码实现了一个手动计算平方根的函数,使用二分查找法来逼近平方根的值。主要思路如下:

(1)特殊情况处理

  • 如果输入x是负数,抛出异常(负数没有实数平方根)

  • 如果x是0或1,直接返回x(因为√0=0,√1=1)

(2)确定查找区间

  • 对于小于1的正数,平方根会大于x本身但小于1,所以二分查找区间设为[x, 1]

  • 对于大于1的数,平方根会在0和x之间,所以二分查找区间设为[0, x]

(3)二分查找过程

  • 不断将区间二分,直到区间长度小于0.01(达到指定精度)

  • 每次计算中点的平方值:

    • 如果中点平方小于x,说明平方根在中点右侧,将下限low调整为中点

    • 否则,说明平方根在中点左侧,将上限high调整为中点

(4)返回结果:当区间足够小时,返回区间的中点作为平方根的近似值

算法特点:

  • 使用二分查找法,时间复杂度为O(log n)

  • 对于不同范围的输入值(x<1和x≥1)采用不同的初始区间,提高效率

  • 通过调整循环条件中的精度值(0.01)可以控制结果的精确度

def handle_sqrt(x):if x < 0:raise ValueError("负数没有平方根")if x == 0 or x == 1:return xif x < 1:low, high = x, 1else:low, high = 0, xwhile high - low > 0.01:mid = (low+high)/2mid_squared = mid ** 2if mid_squared < x:low = midelse:high = mid return (low+high)/2 print(handle_sqrt(3))  # 1.7314453125
http://www.dtcms.com/a/354329.html

相关文章:

  • Spring Security 深度学习(一): 基础入门与默认行为分析
  • 【Vue2 ✨】Vue2 入门之旅(一):初识 Vue2
  • 详细梳理 MyBatis-Plus 的 QueryWrapper 和 LambdaQueryWrapper的入门到精通
  • App中分发中的防盗链开发是做什么的?防盗链有什么作用?什么是防盗链?
  • vscode 如何调试 python 2.7
  • 【PyTorch】基于YOLO的多目标检测项目(一)
  • 免费开源图片压缩工具|绿色版本地运行,支持批量压缩+格式转换,不上传数据,隐私安全有保障!
  • 解决delphi label 在timer下闪烁的问题
  • 字节面试手撕题:神经网络模型损失函数与梯度推导
  • CSS(面试)
  • Mojomox-在线 AI logo 设计工具
  • 从“流量焦虑”到“稳定增长”:用内容平衡术解锁Adsense变现新密码
  • 电子器械如何统一管理系统权限?一场IT治理的“攻坚战”
  • 第二十九天:重载、重写和覆盖
  • 【网络】iptables MASQUERADE作用
  • 机器学习与Backtrader结合量化交易
  • 无人机抗干扰技术要点解析
  • O2OA移动办公 × Flutter:一次开发,跨平台交付
  • 【C++】深入解析构造函数初始化
  • Docker 镜像重命名【打上新的标签】
  • AI应用图文解说--百度智能云实现语音聊天
  • Python爬虫获取1688商品列表与图片信息
  • 【免驱】一款基于AI8H2K08U芯片的USB转RS485模块,嵌入式工程师调试好帮手!
  • Web 自动化测试常用函数实战(一)
  • 如何防御安全标识符 (SID) 历史记录注入
  • 嵌入式学习day38
  • 怎样选择合适的报表系统?报表系统的主要功能有什么
  • PLC_博图系列☞基本指令”S_PULSE:分配脉冲定时器参数并启动“
  • PyTorch闪电入门:张量操作与自动微分实战
  • Wxml2Canvas在组件中的渲染获取不到元素问题