python - Python的while循环平方根问题,返回低小数精度
问题描述
我们需要找到平方根近似值。第一个近似值是
x_0 = n / 2
,其中 n 是我们要平方根的数字。那么 k 近似值将是:
x_(k+1) = (x_k + n / x_k) / 2
问题是我们需要找到其平方在 number 范围内的平方根近似值a
。所以换句话说,在abs(n-a)
所以我尝试解决这个问题:
def square_root_precision(n, a):
approx_zero = n / 2
approx_one = 0
while approx_one ** 2.0 <= abs(n - a):
approx_one = (approx_zero + n / approx_zero) / 2
approx_zero = approx_one
return approx_one
所以问题是我的函数 for n = 2
anda = 0.000001
返回1.5
而不是1.4142135623746899
我多次查看代码。函数精度有问题吗?
如果我们只用循环而不用高级函数来解决这个问题,那就太好了。
解决方案
abs(n - a)
评估为1.999999
并且一旦approx_one
评估为1.5
好,1.5 * 1.5 >= 1.999999
所以它返回你的1.5
.
您想approx_one ** 2.0 <= abs(n - a)
用新计算的近似值与最后一个小于 的绝对差值替换您的值a
。
例如:
def square_root_precision(n, a):
approx_zero = n / 2
approx_one = 0
while True:
approx_one = (approx_zero + n / approx_zero) / 2
if abs(approx_one - approx_zero) < a:
return approx_one
approx_zero = approx_one
square_root_precision(2, 0.001)
1.4142135623746899
推荐阅读
- dialogflow-es - 如何在 Dialogflow 上实现 Permission API
- php - php导出mysql表到excel并创建本地文件,不下载
- python-3.x - 熊猫数据框中两个给定日期之间的日期列表
- c# - 带有 .include .join 和 .where 的 sql linq lambda 表达式
- python - python - 如何从python中numpy.searchsorted的结果加快数组屏蔽的性能?
- python - 无法修复'RuntimeWarning:协程'Command.__call__'从未等待'错误
- c++ - 删除整个链表
- database - 在未连接到同一网络的计算机上复制 oracle 数据库
- html - 删除 CSS 网格中不需要的空间
- java - jacoco prepare-agent 不生成 jacoco.exec 文件