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