圆周率π是怎么算出来的,用程序怎么算
下午在看一个算法的时候,突然看到了一个关于圆周率的问题,如果问你圆的周长怎么算,你肯定毫不犹豫是2πR,但是π是怎么算出来的呢?估计我们都没有想过,所以我们看很多算法的时候,其实只是给了我们一个公式,其实和不懂差不多不是很大。
我来调用下我薄弱的数学细胞,简单来看一下。把一个圆如果展开,得到的就是圆的周长,即一个非精确值3.1415926。
我们来推算一下,下面的这个六边形,如果圆心为中心,那么半径是和六边形的边长度是一样的。假设半径长度是1,则六边形的边也是1。
如果要求得圆周的长度,其实就是不断的把多边形扩张,一条边继续细分为两个角,即十二边形,如此类推,那么得到的结果就是一个极为精确的了。
本来想着公式应该推导起来不难,结果发现数学基础确实不扎实。
第一次推导是按照这种标记方式来的,貌似少了个条件,在左边各种推导,推导失败。
然后换了个思路,重新来推导,总算有了起色。
所以我们可以很明确的知道,如果扩张后的长度和原来的长度的关系是这样的。那么我们就可以借助程序来实现圆周率的算法了。
当然假设我们是不知道圆周率这个东西的,在知道了这个关联关系后,其实可以继续做一些推导。
比如六边形,假设边长为x,则6x的长度是一个最粗略的圆的周长,这样一来,周长就是近似于6,它和半径的关系就是6*1,按照2πR的公式来看,其实也可以理解为2R(即为直径),当然实际周长要比6大一点。也就是我们计算π的意义了。
所以只要切分的边足够多,那么得到的π的值也就更加精确。这个时候写程序的话,可以参考如下的方式,不断的切分。
import java.util.Scanner;public class Test {public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("请输入割圆次数:"); int n = scan.nextInt(); cut(n); }
static void cut(int n) {double y = 1.0; for (int i = 0; i <= n; i++) {double π = 3 * Math.pow(2, i) * y; System.out.println("第" + i + "次切割,为正" + Math.round( 3 * Math.pow(2, i+1)) + "边形,圆周率π≈" + π); y = Math.sqrt(2 - Math.sqrt(4 - y * y)); }}}
程序的输出如下:
请输入割圆次数:15 第0次切割,为正6边形,圆周率π≈3.0 第1次切割,为正12边形,圆周率π≈3.1058285412302498 第2次切割,为正24边形,圆周率π≈3.132628613281237 第3次切割,为正48边形,圆周率π≈3.139350203046872 第4次切割,为正96边形,圆周率π≈3.14103195089053 第5次切割,为正192边形,圆周率π≈3.1414524722853443 第6次切割,为正384边形,圆周率π≈3.141557607911622 第7次切割,为正768边形,圆周率π≈3.141583892148936 第8次切割,为正1536边形,圆周率π≈3.1415904632367617 第9次切割,为正3072边形,圆周率π≈3.1415921060430483 第10次切割,为正6144边形,圆周率π≈3.1415925165881546 第11次切割,为正12288边形,圆周率π≈3.1415926186407894 第12次切割,为正24576边形,圆周率π≈3.1415926453212157 第13次切割,为正49152边形,圆周率π≈3.1415926453212157 第14次切割,为正98304边形,圆周率π≈3.1415926453212157 第15次切割,为正196608边形,圆周率π≈3.1415926453212157
想象古代的人能够计算到小数点后7位,在条件那么简单的情况,真是厉害。
关于圆周率计算的方法,后续再花一些时间琢磨下,比如用蒙特卡洛的算法。今天给我最大的一个收获是让我真正做了一些计算,能够推导出一个看起来有些复杂的公式,看来小学初中的课程内容我开始熟悉起来了。
个人微信公众号,欢迎扫码关注。
圆周率π是怎么算出来的,用程序怎么算相关推荐
- 什么样的程序员才算成熟? 让程序员认清自己的所处的阶段
http://www.nowamagic.net/librarys/veda/detail/1450程序员在经历了若干年编程工作之后,很想知道自己水平到底如何?自己是否已经成为成熟的程序员?虽然程序员 ...
- 超级计算机能算数学题吗,圆周率到底能不能算尽?人类拿超级计算机算了一下,结果不敢相信...
校长科普 2018-12-11 01:16 圆周率到底能不能算尽?人类拿超级计算机算了一下,结果不敢相信 说到圆周率,读过书的小伙伴应该都很清楚吧,在数学课上最有意思的就是算圆周率了.记得校长初中的时 ...
- 圆周率用计算机能算出来不,圆周率到底能不能算尽?人类拿超级计算机算了,结果不敢相信!...
提到圆周率,我们大部分人应该都不会觉得陌生,就这样东西来说,往往我们的首次接触都是在初中的时候.那时候的很多数学老师也会用让学生计算圆周率来评估他们的计算能力.事实上,圆周率是可以一直循环下去的,对此 ...
- 算法精解 c语言描述 豆瓣,斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂!...
原标题:斯坦福大学教授亲授,这本美亚4.7星的算法书,新手程序员都看得懂! "算法会扩展并提高大家的编程技巧,而学习基本的算法设计范式,可以和许多不同领域的不同问题密切相关,还能作为预测算法 ...
- 曲线任意里程中边桩坐标正反算(CASIO fx-4850P计算器)程序第四次修改版
曲线任意里程中边桩坐标正反算(4850P计算器)程序(第四次修改版) 曲线任意里程中边桩坐标正反算(CASIO fx-4850P计算器)程序 ( 第四次修改版 ) 一.程序功能及原理 1.功能说明:本 ...
- 曲线任意里程中边桩坐标正反算及放样fx-4850程序(第五次修改)
有个4800线元法程序,改成5800后,运行后计算某点1的坐标不对,再次运行同样计算该点的坐标,又是对的了,同样计算某点2仍是第二次才能算对,谁能知道怎么回事? 下面是该4800程序 曲线任 ...
- 写一个生成口算题的exe程序
好的,为了写一个生成口算题的 exe 程序,你需要以下步骤: 选择一种编程语言,比如 C++.Java.Python 等. 根据你选择的编程语言,了解相应的编程知识,包括变量.循环.分支.函数等. 设 ...
- Solr相似度算法一:Lucene TF-IDF 相关性算分公式
Solr相似度算法一:Lucene TF-IDF 相关性算分公式 Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序 TF:词频,IDF:逆向文 ...
- c语言坐标反算方位角函数,反三角函数/简易正反算or方位角转度分秒
关于反三角函数的易语言模块很稀少,我就自己弄了一个,分享给大家,也方便那些 用易语言写建筑工程相关软件的程序员们 模块里呢包括反三角函数,简易正反算,方位角or度分秒ms互换 模块里 普通的三角函数: ...
- 作业帮口算批改怎么开 作业帮口算批改如何用
作业帮口算批改功能怎么用?作业帮最近全新改版的消息传的很火,新增了口算批改的功能,很吸引人.但是还有很多用户不是很清楚作业帮口算批改功能怎么用,下面是小编整理的关于作业帮口算批改功能怎么用的相关资讯, ...
最新文章
- python监控错误语句,基于Python的关键字监控及告警
- eclipse提交Git时忽略文件
- 人工神经网络之激活函数总结
- C++之静态成员变量和静态成员函数
- JAVA运行时异常及常见的5中RuntimeExecption
- Charles proxy tools 移动开发调试
- H5营销互动小游戏源码
- 计算机出现函数不正确的是,小编教你快速修复无法访问函数不正确的方法
- DNS服务器的安装与配置
- 应用宝shangjia安全评估报告_【开发者必看】APP《安全评估报告》怎么写?附填写范例...
- 这种性生活伤女人尿道
- 工业物联网平台的效益有哪些
- troubleshooting之解决YARN队列资源不足导致的application直接失败
- 人体的矢状面,冠状面,以及水平面,你懂吗?
- 世界杯四强大胆预测!!
- SQL语句中生成UUID方法
- 经验帖|M1芯片的MacBook pro如何安装Tensorflow【亲测有效】
- 教师资格证报名网页兼容问题
- CityEngine城市引擎
- ubuntu 安装 QT 【亲测有效】