有人可以帮我检查我的算法吗?

时间:2018-07-15 03:45:40

标签: python algorithm

我指的是本教程中的一个练习: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

我的第四列中的值是错误的。您能帮我找出代码中的问题吗?我已经检查过多次了。谢谢!

0 个答案:

没有答案