我指的是本教程中的一个练习:http://www.greenteapress.com/thinkpython/thinkpython.pdf
本练习测试平方根算法,并使用乘法表将其与math.sqrt
进行比较。我需要提供以下信息:
1.0 1.0 1.0 0.0
2.0 1.41421356237 1.41421356237 2.22044604925e-16
3.0 1.73205080757 1.73205080757 0.0
4.0 2.0 2.0 0.0
5.0 2.2360679775 2.2360679775 0.0
6.0 2.44948974278 2.44948974278 0.0
7.0 2.64575131106 2.64575131106 0.0
8.0 2.82842712475 2.82842712475 4.4408920985e-16
9.0 3.0 3.0 0.0
第一列是数字a
;第二列是使用第7.5节中的函数计算的a
的平方根;第三列是由math.sqrt
计算的平方根;第四列是两个估算值之差的绝对值。
现在,这是我的代码:
#Exercise 7.3
#Define square root algorithim
def square_root(a):
x = 3
while True:
y = (x + a/x)/2
epsilon = 0.00001
if abs(y-x) < epsilon:
break
x = y
return y
#Create multiplication table
import math
def test_square_root():
n = 1.0
print(n,end=" ")
print(square_root(n),end=" ")
print(math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
n = 2.0
print(n,end=" ")
print("%.11f"%square_root(n),end=" ")
print("%.11f"%math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
n = 3.0
print(n,end=" ")
print("%.11f"%square_root(n),end=" ")
print("%.11f"%math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
n = 4.0
print(n,end=" ")
print("%.1f"%square_root(n),end=" ")
print("%.1f"%math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
n = 5.0
print(n,end=" ")
print("%.10f"%square_root(n),end=" ")
print("%.10f"%math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
n = 6.0
print(n,end=" ")
print("%.11f"%square_root(n),end=" ")
print("%.11f"%math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
n = 7.0
print(n,end=" ")
print("%.11f"%square_root(n),end=" ")
print("%.11f"%math.sqrt(n),end="")
print(abs(square_root(n)-math.sqrt(n)))
n = 8.0
print(n,end=" ")
print("%.11f"%square_root(n),end=" ")
print("%.11f"%math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
n = 9.0
print(n,end=" ")
print("%.1f"%square_root(n),end=" ")
print(math.sqrt(n),end=" ")
print(abs(square_root(n)-math.sqrt(n)))
test_square_root()
#Output
1.0 1.0 1.0 0.0
2.0 1.41421356237 1.41421356237 1.6653345369377348e-14
3.0 1.73205080757 1.73205080757 0.0
4.0 2.0 2.0 0.0
5.0 2.2360679775 2.2360679775 1.8829382497642655e-13
6.0 2.44948974278 2.44948974278 8.881784197001252e-16
7.0 2.64575131106 2.64575131106 0.0
8.0 2.82842712475 2.82842712475 3.1894487051431497e-12
9.0 3.0 3.0 0.0
我的第四列中的值是错误的。您能帮我找出代码中的问题吗?我已经检查过多次了。谢谢!