描述
我国魏晋时期的数学家刘徽于公元263年撰写《九章算术注》,其中就有数学史上著名的“割圆术”。刘徽形容他的“割圆术”说:割之弥细,所失弥少,割之又割,以至于不可割,则与圆合体,而无所失矣。这包含了求极限的思想。通过求圆内接正多边形的周长来近似求圆的周长,并使正多边形的周长无限接近圆的周长,进而求得较为精确的圆周率。
设圆半径为1,圆内接正6边形边长也为1,可如下计算正12边形的边长:
编程实现割圆法计算圆周率,并输出分割不同次数时边数、圆周率值以及计算所得圆周率值与math库中的圆周率值的偏差。
输入格式
输入为一个,一个正整数n,表示在内接正六边形的基础上割圆的次数。
输出格式
输出为两行,第一行输出在内接正六边形基础上再次分隔的次数n,分隔得到的正多边形的边数m,以及割圆法计算得到的圆周率pi(保留六位小数)。具体输出格式见示例。
import math
def cutting_circle(times): # times为分割次数
side_length = 1 # 初始边长
edges = 6 # 初始边数
def length(x):
h = math.sqrt(1-(x /2)**2)
return math.sqrt((x /2)**2 + (1-h)**2)
for i in range(times):
side_length = length(side_length)
edges *=2
pi = side_length*edges/2
return edges, pi
if __name__ == '__main__':
times = int(input()) # 割圆次数
print('分割{}次,边数为{},圆周率为{:.6f}'.format(times, *cutting_circle(times))) # 圆周率
print('math库中的圆周率常量值为{:.6f}'.format(math.pi))
测试: