无障碍 关怀版

【科普向】纸上得来终觉浅,绝知此事要躬行:从π的355/113近似说起

本文提供了python计算最接近π的分数的程序与说明,阅读仅需5min。

直接正文

提起中国古代的数学成就,都会想起南北朝时期的祖冲之。

提起祖冲之,大家最熟悉的就是他在计算圆周率π方面的杰出贡献,祖冲之在前人研究圆周率的基础上进一步得出精确到小数点后7位的结果,给出不足近似值3.1415926和过剩近似值3.1415927,即:

3.1415926<π<3.1415927

他还得到两个近似分数值,密率355/113和约率22/7。密率355/113传到了日本,日本人将它叫做“祖率”。

很多人知道用355/113表示π是一项了不起的贡献,但是,它的奇妙之处很少有人能够了解,或者说不全。

首先,它非常精确:

355/113=3.1415929204···

π=3.1415926535···

因此,两者之间的误差不足0.000000267···,即2.67e-07。

但是它足够精确吗,根据祖冲之得到的3.1415926<π<3.1415927,他可以得到一个更加精确的分数:

314159265/100000000=3.14159265

作为π的近似值,因为误差不超过0.00000005,即5e-08,比2.67e-07精确了一个数量级。

那祖冲之为什么不用314159265/100000000或者62831853/20000000来作为密率呢?

很明显,因为这个分母过大,且不容易记住。

355/113这个分数的分母足够小,且记起来非常简单,113355,从中间切开,一半放在分母,一半放在分子就行了。

我们知道,如果给定了一个数字作为分母,那么它一定会有一个最接近于π的分子,比如分母是7,那么以7为分母的一系列分数中,我们可以找到最接近于π的那一个。

因为π首先介于3和4之间,所以分子的大小范围控制在3*7和4*7之间,略微减少不必要的计算:

以下开始用python代码进行计算

首先,我们需要获取比较准确的π近似值,这里导入math函数:

import math

pi_val = math.pi

print(pi_val)

#output:3.141592653589793

第二步,给定任意的数字a,分子从3a增大到4a,获得分数,计算分数与π的差值,选取差值最小的那一个,就是以a为分母能够得到的最接近π的分数。

由于分子从3a增大到4a的过程中,在得到最接近π的分数之前,差值是逐渐变小的,而在得到最接近π的分数之后,差值是逐渐变大的,因此我们设定,当新获取的差值比之前最小的差值大的时候,循环停止(当然,如果你愿意,你甚至可以将设置范围为3.14a增大到3.15a之间的整数):

def get_fraction_min_of_one_denominator(a):

error_min=10

i_min=0

for i in range(3*a,4*a):

fraction_val=i/a

error=abs(fraction_val-pi_val)

if error<error_min:

error_min=error

i_min=i

if error>error_min:

break

fraction_min=str(i_min)+"/"+str(a)

print("分母为"+str(a)+"最接近于π的分数为:"+fraction_min+",误差为:"+str(error_min))

return error_min,fraction_min

测试一下:

这样我们就可以循环地找分母在某个数以内最接近于π的分数了:

def get_fractions_closest_to_pi(a):

for i in range(1,a+1):

error,fraction=get_fraction_min_of_one_denominator(i)

if i==1:

error_min=error

fraction_min=fraction

if error<error_min:

print("在所有分母不超过"+str(i-1)+"的分数中,与π最接近的分数为:"+fraction_min+",误差为:"+str(error_min))

error_min=error

fraction_min=fraction

print("在所有分母不超过"+str(a)+"的分数中,与π最接近的分数为:"+fraction_min+",误差为:"+str(error_min))

比如我们可以选取从1循环到100:

在所有分母不超过100的分数中,与π最接近的分数为:311/99,误差为:0.00017851217565167943

也就是说,如果祖冲之想用分母为两位数的分母表示π,最准确的分母是311/99,这个好像也不难记。

如果是1000以内呢?

哦豁,我们发现,分母在100以内时,随着分母的增大,很快就会有一个新的分数更加接近π,在113以内与π最接近的分数是355/113,然而分母从113开始增大,一直增大到1000,竟然就没有一个分数比355/113还要接近π。

我们再来测试一下4位数,10000以内:

哦豁,在分母不超10000以内,竟然还是没有任何一个分数比355/113更加接近π。

一直到分母为16604时,才出现了另一个比355/113更加接近π的分数:52163/16604

然而如果你仔细看,52163/16604比355/113并没有更加精确多少,误差数量级差不多都是2.66e-07,几乎没有明显的改善。

而如果你想记住52163/16604这个分数,恐怕还不如直接记住3.1415926呢。

如果时间允许,你还可以继续往后算算,分母为100万以内的最接近π的分数,不过,使用上面的代码可能需要较长的等待:

关注【学谦数据运营】,回复“圆周率”获取改进版高效计算代码。

结语

那么,祖冲之究竟是用什么办法把π算到小数点后第七位,又是怎样找到既精确又方便记忆的近似值355/113呢?估计是用python算的吧。这是至今仍困惑着数学家的一个谜。

返回搜狐,查看更多

责任编辑:

平台声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
推荐阅读

两个鬼故事起名字改人名大全directx12米姓男孩起名两个字女装服装店起名黄巢的诗女孩唯美起名名片的起源个体工商工商起名公司名称起名起名字罗王姓起名子大全给书房起名字地基基础公司起名四根贯穿np上帝然然的个人空间五行属木的字男孩起名知道生辰八字如何起名纹绣店起名吉野家王氏起名打分姐弟恋言情小说饕餮靠吃爆红娱乐圈1518公司起名测试打分结果沙盘公司名字起名大全猪小孩起名宜用哪些字预定嗫嚅的意思梓用来起什么名字好起名字的讲究和依据三个字的建筑商贸公司起名少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化