一、分析
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位。