Python题库:函数

来自CloudWiki
Cloud17讨论 | 贡献2021年11月12日 (五) 07:28的版本
跳转至: 导航搜索

二分法求平方根B

描述

设计一个用二分法计算一个大于或等于 0 的实数 n 的平方根的函数sqrt_binary(n),实数 n和计算精度控制由用户在同一行内输入,用逗号进行分隔,输出结果保留8位小数。当(abs(x * x - n) )小于或等于设定的精度时,近似认为 x * x == n。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

注:初始区间取[0,n+0.25]‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输入格式

在同 行内输入一个实数 n(大于或等于0)和一个代表精度的数字(可用1e-m格式输入),逗号间隔‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输出格式

第一行输出用自己设计的函数计算得到的平方根‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

第二行输出用math库开平方函数计算得到的平方根‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

输入输出示例

输入 	输出

示例 1 5.0,1e-7

代码



import math


def sqrt_binary(num, accuracy):
	"""接收一个浮点数num和一个表示计算精度的浮点数accuracy为参数,用二分法计算浮点数的平方根x,
	当 abs(x * x - num) <= accuracy时认为达到计算精度,以浮点数类型返回计算得到的平方根。"""
	low, high = 0, num + 0.25             # 设定初始区间
	while True:                           # 构建无限循环
		x = (high + low) / 2              # 假设平方根落在区间的二分之一处,即中点
		if abs(x * x - num) <= accuracy:  # 当误差小于计算精度时,终止循环
			return x                      # 返回当前的x值为平方根
		elif x * x - num < 0:             # 当前x的平方小于num时,平方根应该位于右侧区间
			low = x                       # 以当前数值为区间下限,缩小区间为原来的一半
		else:                             # 当前x的平方大于num时,平方根应该位于左侧区间
			high = x                      # 以当前数值为区间上限,缩小区间为原来的一半


n, error = map(float, input().split(','))      # 输入浮点数 n 和计算精度
print('{:.8f}'.format(sqrt_binary(n, error)))  # 调用二分法函数计算平方根
print('{:.8f}'.format(math.sqrt(n)))           # 用math库中的sqrt()计算平方根