由祖冲之圆周率洞悉——古中国数学家的计算力真是惊人
很长时间,我都不太认为古代数学有哪些惊人,只是还知道勾股定理,杨辉三角,以及祖冲之算圆周率等。
今天老婆问我圆周率怎么算的,我就想了想。虽然圆周率可以有一堆无穷级数或者无穷乘积可以表示,我还是选择了用最简单的方式来回答,于是就直接行动起来吧。
选择一个单位圆,x2+y2=1,它的面积就是pi,于是用微积分逼近的方法来做,分成n等分,然后用上和或者下和逼近。当然要考虑精度问题,所以还是用上bc这个任意精度计算器,这个计算器我一直很喜欢使用,一边跟老婆解释一边写程序,程序很快写完。
scale = 12;/*所有计算精度小数点后12位*/ n = 10^6;/*单位圆切200万刀,y轴左右各100万刀*/ pi = 0;/*上和累计初始值为0*/ for(i=0;i<n;i++) {x = i/n;/*x坐标*/y = sqrt(1-x^2);/*y坐标*/s = 4*y/n;/*此块上和,4个象限对称4份*/pi = pi+s;/*累和进去*/ } print "pi = ", pi, "\n";/*最终打印出累和出来的圆周率*/
用bc运行一下,我的虚拟机24秒后有了结果。
1
2
3
4
5
6
|
# time bc <2
pi = 3.141594151717
real 0m24.015s
user 0m24.006s
sys 0m0.008s
|
结果并不是很理想,计算精度12位其实只是影响了一点点累和时的精度问题,完全不是祖冲之的3.14159265级别的问题。
于是换条路吧,祖冲之的割圆术应该是对周长的,于是我就分它个215=32768份,成为一个32768边形,边长其实是2*sin(2*pi/32768),我们就来算这个值吧。sin(2x)=2sin(x)*cos(x),因为是锐角,可算出sin(x)=sqrt((1-sqrt(1-cos(2x)*cos(2x)))/2)。
继续用bc来写,
n=13;/*从圆的内接正方形开始,开始对切13次*/ scale=20;/*纪念20位足够*/ s=sqrt(2)/2;/*sin(pi/4)*/ for(i=0;i<n;i++) {s = sqrt((1-sqrt(1-s^2))/2);/*一个个的推*/ } print "pi = ", 4*s*2^n, "\n";/*打印圆周率*/
运行一下,这次对于计算机就很快了,长度法比面积法靠谱,
1
2
3
4
5
6
|
# time bc <3
p = 3.14159264877598965760
real 0m0.007s
user 0m0.004s
sys 0m0.004s
|
可是,精度还差那么一点,看来应该多切一刀,把程序中的n改成14,精度符合要求。
1
2
3
4
5
6
|
# time bc <3
p = 3.14159265238350561280
real 0m0.005s
user 0m0.000s
sys 0m0.004s
|
这样的开平方运算用手算是很复杂的,参考我的博文《平方根的C语言实现(二) —— 手算平方根的原理》,我无法想像祖冲之如何面对这么复杂的运算的。中国古人虽然可能对于数学的基本原理没有做深层次的考虑(不排除以前考虑过,但资料丢失的可能,毕竟经过了嬴政和刘彻和那么多的朝代),但至少古人的计算能力真的是很让人震撼。
转载于:https://www.cnblogs.com/txqdm/p/8616338.html
由祖冲之圆周率洞悉——古中国数学家的计算力真是惊人相关推荐
- 古中国的超级计算机——领跑全人类
古中国的超级计算机--领跑全人类 目录 古中国的超级计算机--领跑全人类 古中国算法 前言 关键字 珠算概述 珠算语法 珠算口诀 伟大的每一步 案例1:算盘开根号 案例2: 算盘准确率与多线程 案例3 ...
- 全球每年仅一位!中国数学家印卧涛荣获优化领域Egon Balas奖
转自:AI科技评论 运筹学和管理学研究会(INFORMS)优化协会近日宣布,将2021年度 Egon Balas 奖授予中国数学家印卧涛,以表彰其在优化领域做出的突出贡献.印卧涛曾是加州大学洛杉矶分校 ...
- 中国数学家秦九韶算法示例
秦九韶算法是一种用于求解含有多元项的多项式根的算法.它是由中国数学家秦九韶于20世纪50年代提出的.这种算法主要用于解决高次多项式的根,并且在某些情况下可以更快地求解多项式根,相比牛顿迭代法,Lagu ...
- 中国10大顶级富豪惊人挥霍排行榜
中国10大顶级富豪惊人挥霍排行榜 富豪姓名:荣智健 富豪身份:中信泰富有限公司董事局主席 财富档案:世界经理人数据[data.icxo.com]:1978年南下香港创业,先凭借父亲荣毅仁在港积下的几十 ...
- 求圆周率pi的怪异程序 祖冲之圆周率算法绝技之迷
据说华罗庚曾讲过一个故事,说:有个教书先生喜欢喝酒,一天,他叫学生背圆周率,自己却提壶酒到山上庙里找老和尚喝酒去了.有个聪明的学生把圆周率编了个打油诗"山巅一寺一壶酒,尔乐苦煞吾,把酒吃:酒 ...
- 中国数学家黄金一代-北大数学专业2000级
听说许晨阳和恽之玮好久了,今天心血来潮查了一下资料,不得了,原来都是属于80后,叹一声,命运不公啊,人家现在是世界著名的数学家了!不查不要紧,查完吓一跳,基本都同属于2000级北大本科数学专业,而且这 ...
- 中国数学家破解世界百年难题
作者: 来源: 新华社.<广州日报>.<信息时报> 朱熹平教授. 曹怀东教授. "七大世纪数学难题"之一的庞加莱猜想,近日被科学家完全破解,中国科学 ...
- 中国数学家在微分几何学领域取得重大突破
记者从中国科学技术大学获悉,该校教授陈秀雄.王兵在微分几何学领域取得重大突破,成功证明了"哈密尔顿-田"和"偏零阶估计"这两个国际数学界20多年悬而未决的核心猜 ...
- 航拍仙人掌识别_使用转移学习识别空中仙人掌
航拍仙人掌识别 Transfer learning is a useful strategy for applications of image like classification and det ...
最新文章
- JAVA增删改查XML文件
- Eclipse中新建WEB项目,JSP页面报错。
- mysql性能优化之sql语句优化最强合集
- 在Linux上按大小列出文件和目录
- docker-compose安装问题
- 自动备份多个MOSS站点集的脚本
- 随着浏览器窗口缩小表格出现横向滚动条
- java实现点卡生成
- I.MX6UL核心模块tf卡启动linux的实现
- 关于 Linux 中 signal 函数信号处理的讨论
- python橙色_如何自定义橙色Firefox菜单按钮的外观
- Java架构师 HR常见面试问题_Java架构师,常见的几个JEE面试问题, 感觉还是有些地方有点晕。 稀里糊涂,晒一下...
- uniapp框架如何实现仿微信相册 | 图视频过滤、相册选择功能
- 从利用gensim 训练好的word2vec模型中取出向量并计算余弦相似度,Levenshtein distance 计算
- 数据集:银行客户信息
- Linux中mysql的重启
- matlab fpga 移植,使用MATLAB,Simulink以及基于模型的设计实现把电机控制算法移植到Zynq平台...
- 架构设计:架构设计要平衡兼顾多方需求
- 霍乱时期的爱情——简写(上)
- Stay hungry stay young
热门文章
- 【信息安全】屁股决定脑袋的COSO内控框架,一篇对COSO的趣评
- The Derivation About CNN and Antoencoder
- 内存类型UDIMM、RDIMM、LRDIMM
- CentOS (linux) 启动错误 *** Run 'setenforce 1'to reenable. 解决
- 云呐机房动环FSU监控系统,fsu监控设备怎么调
- Selenium 自动化测试从0实战经验
- @RunWith(SpringRunner.class)和@RunWith(SpringJUnit4ClassRunner.class)的区别
- 软考-高项-论文-信息系统项目的进度管理
- 昨天面试题目--软件--SQL--后感
- 百度地图导航Android6.0初始化失败解决方法