集智社区
资源加载中,请稍后...
集智社区

集智社区

Sic Parvis Magna

求助(未解决)

读书疑问|为何循环内出现越来越大的差值?

发表至编程讨论

在阅读《像计算机科学家一样思考python》的时候,章节7.9的一个练习题 于是我在调试过程中遇到了以下问题 如图

为啥这两者之间的差,会越来越大呢(。・ω・。)

import math
def mysqrt(a):
    '''
    牛顿迭代法获取参数a的平方根,返回y
    '''
    x=1
    while True:
        y=(x+a/x)/2
        if abs(x-y)<=0.01:
            return y
            break
        x=y
def table(n):
    '''
    打印表格,分别对照参数从0到n的平方根,牛顿迭代法求出的平方根mysqrt,python自带math模块求出的平方根,以及迭代法与math模块两者的差
    '''
    print("a{0:^18}{1:^18}{2:^18}".format("mysqrt","math.sqrt","diff")) #打印表格头部
    print("-"*50)                                                       #打印分割线

    for i in range(0,n+1):                                              #循环求根     
        a=mysqrt(i)        #迭代根
        b=math.sqrt(i)    #math求根
        c=abs(a-b)        #两者的差
        print("{0:<8}{1:<17}{2:<20}{3:<10}".format(str(i),str(a)[0:5],str(b)[0:5],str(c)[0:5]))

table(5)

谁能告诉我为啥这个差会越来越大233333,不科学!

快来抢沙发吧!收起讨论