# 核心函数
def findSquareRoot(x):if x < 0:print ('Sorry, imaginary numbers are out of scope!')returnans = 0while ans**2 < x:ans = ans + 1if ans**2 != x:print (x, 'is not a perfect square')print ('Square root of ' + str(x) + ' is close to ' + str(ans - 1))else:print ('Square root of ' + str(x) + ' is ' + str(ans))return# 基于迭代查找在某个误差范围内找到平方根
def findSquareRootWithinError(x, epsilon, increment):if x < 0:print ('Sorry, imaginary numbers are out of scope!')returnnumGuesses = 0ans = 0.0while x - ans**2 > epsilon:ans += incrementnumGuesses += 1print ('numGuesses =', numGuesses)if abs(x - ans**2) > epsilon:print ('Failed on square root of', x)else:print (ans, 'is close to square root of', x)return# 基于二分查找在某个误差范围内找到平方根
def bisectionSearchForSquareRoot(x, epsilon):if x < 0:print ('Sorry, imaginary numbers are out of scope!')returnnumGuesses = 0low = 0.0high = xans = (high + low)/2.0while abs(ans**2 - x) >= epsilon:if ans**2 < x:low = anselse:high = ansans = (high + low)/2.0numGuesses += 1# print('low = ', low, 'high = ', high, 'guess = ', ans)print ('numGuesses =', numGuesses)print (ans, 'is close to square root of', x)return

测试代码:

findSquareRoot(65536)
findSquareRootWithinError(65535, .01, .001)
findSquareRootWithinError(65535, .01, .0001)
findSquareRootWithinError(65535, .01, .00001)
bisectionSearchForSquareRoot(65535, .01)

运行结果:

Square root of 65536 is 256
numGuesses = 255999
Failed on square root of 65535
numGuesses = 2559981
Failed on square root of 65535
numGuesses = 25599803
255.99803007005775 is close to square root of 65535
numGuesses = 24
255.99804684519768 is close to square root of 65535

首先第一个函数,是迭代查找,猜想并检查,得到的应该是相当于向下取整的结果了。
我们的测试数据是65536,得到256。
如果测试数据是65535,将得到255,然而结果显然更接近256,这就无奈了。

第二个函数修改了while循环,递增一个远小于1的数字,由用户决定误差和每次递增的数。
这样可能跳过结果或者导致运行过慢。
这个函数努力规避浮点数严格相等判定时精度的影响。

print(0.1+0.2)

输出结果:

0.30000000000000004

最后一个运用了二分查找(折半查找)的思想,done

【Python】Python迭代求解开平方算法相关推荐

  1. python最小公倍数 菜鸟_Python实现的求解最小公倍数算法示例

    本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具体如下: 简单分析了一下,前面介绍的最大公约数的求解方法跟最小公倍数求解方法类似,只需要改一个简单的条件,然后做一点简单的其 ...

  2. python求最小公倍数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  3. python中最小公倍数函数_Python实现的求解最小公倍数算法示例

    这篇文章主要介绍了Python实现的求解最小公倍数算法,涉及Python数值运算.判断等相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现的求解最小公倍数算法.分享给大家供大家参考,具 ...

  4. 【基础算法】开平方算法 C++实现

    ●开平方 在数学中,因为很多数的开平方都是无理数,所以我们需要借助数值计算的方式来进行近似值的求解.在数学中可以使用如下的迭代公式来求解a开平方的近似值: 迭代法求解开平方算法的操作步骤如下: 1.选 ...

  5. Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计

    Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 文章目录 Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 0.前言 1.研究问题的描 ...

  6. Python数模笔记-模拟退火算法(4)旅行商问题

    1.旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题,要求找到遍历所有城市且每个城市只访问一次的最短旅行路线,即对给定的正权完全图求其总权 ...

  7. Python数模笔记-模拟退火算法(3)整数规划问题

    1.整数规划问题 整数规划问题在工业.经济.国防.医疗等各行各业应用十分广泛,是指规划中的变量(全部或部分)限制为整数,属于离散优化问题(Discrete Optimization). 线性规划问题的 ...

  8. Python数模笔记-模拟退火算法(2)约束条件的处理

    1.最优化与线性规划 最优化问题的三要素是决策变量.目标函数和约束条件. 线性规划(Linear programming),是研究线性约束条件下线性目标函数的极值问题的优化方法,常用于解决利用现有的资 ...

  9. Python数模笔记-模拟退火算法(1)多变量函数优化

    1.模拟退火算法 模拟退火算法借鉴了统计物理学的思想,是一种简单.通用的启发式优化算法,并在理论上具有概率性全局优化性能,因而在科研和工程中得到了广泛的应用. 退火是金属从熔融状态缓慢冷却.最终达到能 ...

最新文章

  1. 【记录】用Javascript实现文本框textarea高度随内容自动适应增长收缩
  2. UA MATH575B 数值分析下VI 统计物理的随机模拟方法1
  3. Java 多线程之 synchronized 和 volatile 的比较
  4. springboot-springmvc响应json与xml原理-详解数据响应与内容协商(长文预警,收藏慢啃)
  5. python array函数_Python numpy.array函数方法的使用
  6. Java中final关键字的几种用法
  7. python访问web网页_python访问web的利器:urllib2
  8. Spring系列之bean的使用
  9. js兼容安卓与ios的复制到粘贴板功能
  10. c++ 位运算_C语言之运算符
  11. 2010年终人生的思考
  12. live555 windows下编译以及修订
  13. Gradle引入外部资源冲突问题,Gradle版本库冲突解决
  14. linux系统下 java 环境的安装
  15. msdev.exe 应用程序错误 的解决办法
  16. 【开发工具集】显示设备驱动程序列表——DriverView
  17. python cad模块_Python cad包_程序模块 - PyPI - Python中文网
  18. JavaWeb课堂笔记
  19. 扫呗、通联微信后台配置支付授权目录流程
  20. 开源学校管理系统php,SchoolCMS学校管理系统 v2.3

热门文章

  1. table 样式详解
  2. 4.openstack之mitaka搭建glance镜像服务
  3. javascript设计模式-学习笔记
  4. hdu Candy Sharing Game
  5. Angularjs Nodejs Grunt 一个例子
  6. Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag
  7. print输出 pytorch_pytorch打印网络结构的实例
  8. java解析时已到达文件结尾_IO流读取到文件末尾继续读取
  9. DOS命令、Java语言开发环境(JVM、JDK、JRE)
  10. 用Java写有关早上的语录,实用的适合早上发的早安问候语语录汇编39句