Python近似圆周率函数实现问题求助——Saylor课程单元5测验
解决嵌套根号近似圆周率的实现问题
首先,你的代码存在几个关键错误:
- 循环内的
print(V=(...))语法无效,不能在print中直接赋值变量 - 错误地将参数
N当作函数调用(N(math.sqrt(2)+math.sqrt(2))) - 没有正确实现嵌套根号的迭代逻辑,变量
V无有效初始化,也未累积乘积项
正确实现逻辑(基于Viète圆周率公式)
题目要求的嵌套根号近似法对应Viète公式,核心是通过迭代计算余弦项的乘积:
- 初始项:第一个余弦项为
cos(π/4) = √2/2 - 迭代规则:每一项
cₙ = √(2 + 2*cₙ₋₁)/2(实现嵌套根号的累加) - 累积所有项的乘积
P,最终通过π ≈ 2/P计算估计值 - 比较估计值与真实π的误差是否小于
1e-7,返回布尔结果
修正后的代码
import math def pi_approx(N): # 初始化乘积为第一个余弦项 product = math.sqrt(2) / 2 current_term = product # 迭代计算嵌套根号的余弦项并累积乘积 for _ in range(N - 1): current_term = math.sqrt(2 + 2 * current_term) / 2 product *= current_term # 计算π的估计值 pi_est = 2 / product # 判断误差是否符合要求 return math.fabs(pi_est - math.pi) < 1e-7
说明
- 当
N足够大时(比如N=10),估计值与真实π的误差会小于1e-7,函数返回True - 循环从
N-1次开始,因为我们已经初始化了第一个项,后续每次迭代添加一层嵌套根号
内容的提问来源于stack exchange,提问作者Emilio Velazquez
相关产品推荐
相关产品推荐

