“Python题库:函数”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
(创建页面,内容为“==二分法求平方根B== ===描述=== 设计一个用二分法计算一个大于或等于 0 的实数 n 的平方根的函数sqrt_binary(n),实数 n和计算精…”)
 
第19行: 第19行:
  
 
示例 1 5.0,1e-7
 
示例 1 5.0,1e-7
 +
 +
===代码===
 +
<nowiki>
 +
 +
 +
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()计算平方根
 +
 +
</nowiki>

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()计算平方根