任务描述 设计一个用二分法计算一个大于或等于 0 的实数 n 的平方根的函数sqrt_binary(n),实数 n和计算精度控制由用户在同一行内输入,用逗号进行分隔,输出结果保留8位小数。当(abs(x * x - n) )小于或等于设定的精度时,近似认为 x * x == n。 注:初始区间取[0,n+0.25] 输入格式 在同 行内输入一个实数 n(大于或等于0)和一个代表精度的数字(可用1e-m格式输入),逗号间隔 输出格式 第一行输出用自己设计的函数计算得到的平方根 第二行输出用math库开平方函数计算得到的平方根
时间: 2024-04-21 09:29:26 浏览: 149
根据题意,我们需要设计一个用二分法计算平方根的函数。二分法的思路是不断将区间缩小,直到找到一个合适的答案。根据题目要求,我们的初始区间应该是[0, n+0.25],其中0.25为一个经验值,保证区间一定包含n的平方根。每次迭代时,将区间的中点计算出来,判断中点的平方是否和n的差小于设定的精度。如果小于精度,我们认为找到了答案,返回中点的值;否则根据平方的大小关系,缩小区间,继续迭代。我们可以定义如下的函数:
```python
def sqrt_binary(n, eps):
left, right = 0, n+0.25 # 初始区间
while True:
mid = (left + right) / 2 # 区间中点
if abs(mid * mid - n) <= eps: # 找到答案
return mid
elif mid * mid > n: # 中点平方过大,缩小右端点
right = mid
else: # 中点平方过小,缩小左端点
left = mid
```
其中,n是输入的实数,eps是设定的精度。函数返回计算得到的平方根。
接下来,我们可以完整实现程序,代码如下:
```python
import math
n, eps = input().split(',')
n, eps = float(n), float(eps)
result1 = sqrt_binary(n, eps)
result2 = math.sqrt(n)
print('{:.8f}'.format(result1))
print('{:.8f}'.format(result2))
```
首先读入输入的实数n和精度eps,然后分别调用二分法计算函数sqrt_binary和math库中的sqrt函数计算平方根。最后,按照题目要求,输出两个结果。
阅读全文