互联网面试宝典

您现在的位置是: 首页 > 数据结构

问题详情

已知 sqrt (2)约等于 1.414,要求不用数学库,求 sqrt (2)精确到小数点后 10 位。

面试宝典 2023-06-12 Web前端开发工程师 54
可以利用二分法来逼近 sqrt(2) 的值。假设 sqrt(2) 的值在区间 [1,2] 内,我们可以选择一个中间值 m,比较 m 的平方与 2 的大小关系,由于 sqrt(2) 大于 1,所以 m 的平方肯定大于 1,如果 m 的平方大于 2,则说明 sqrt(2) 在区间 [1, m] 内,否则说明 sqrt(2) 在区间 [m, 2] 内。然后重复以上步骤,在足够次数的迭代后,即可得到 sqrt(2) 的近似值。

下面是 Python 代码实现:

def sqrt2():
left, right = 1, 2 # sqrt(2) 在区间 [1,2] 内
while True:
m = (left + right) / 2
if abs(m * m - 2) < 1e-11: # 精度达到 1e-11,退出循环
return m
elif m * m > 2: # sqrt(2) 在区间 [left, m] 内
right = m
else: # sqrt(2) 在区间 [m, right] 内
left = m

print("%.10f" % sqrt2()) # 输出 sqrt(2) 的近似值,精确到小数点后 10 位