强基初中数学&学Python——第三课 无理数:推算平方后是2的数

一、分析

    Python中用浮点数来表示小数,难以到达到小数点后100位的精度,然而Python的整数却可以有很多位数,因此使用整数来推算这个平方数是2的数。问题就转化为:在101位整数中,找到相邻的2个整数,下限的平方比比较值(2后200个0的整数)小,上限的平方比比较值大。

    由于数值太大,采用中值逼近法不太可取,“按位逼近法”取而代之:

假设上一次的下限值和比较值分别是a和m,即:

a²<m<(a+1)²;

a增大到10倍,则m就对应的增大到100倍(10²),

显然存在一个数n(0到9),使得:

(10a+n)²<m×100<(10a+n+1)²。

二、Python源程序

#平方数值  大于1小于100的整数

value = 2

#小数点后位数

dec_num = 100

#下限值

start=0

#上限值

end = start + 1                    #下限值+1

#打印出全部结果

for i in range(dec_num + 1):       #0到dec_num共dec_num + 1次

    while end ** 2 < value:        #当上限值的平方小于比较值

        start = end                #上限值代替下限值

        end = start + 1            #上限值是下限值+1

    s=str(start)                   #找到了最近下限值,转为字符

    print("小数点后%d位:%s" % (i, s[0] + "." +s[1:]))

    start = start*10               #下限值是增大到10倍

    end = start + 1                #上限值是下限值+1

    value = value*10**2            #用于对比的平方数增大到100倍

三、程序输出

小数点后100位:1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727

四、结果分析

    小数点后100位中,没有出现循环节,看来这个数是传说中的无限位不循环小数。

五、练习题

    改编上面的程序,使其能推算平方数是3的数到小数点后200位。