使用Machin公式计算
使用Machin公式计算,并使用百亿进制+末项位数控制,这里可算出数万位(比最简PI快80倍),源代码约40行,在本网页中。 计算公式 PI=16arctg(1/5)-4arctg(1/239),其中arctg(x)=x-x^3/3+x^5/5-x^7/7+x^9/9... 令X=x^2并提取公因式得:arctg(x)=x(1-X(1/3-X(1/5-X(1/7-X(…,只需迭代b=1/(2n+1)-b*X,n=N,…,3,2,1,0,最后算b*x即得arctg(x)要想快速计算几十万位或几百万位,应使用C++或汇编语言,要取得几千万位请使用Ramanujan公式,要算几亿位或几十亿位请用几何算术平均值算法//PI计算javascript程序,Machin+百亿进制优化 //2006.12 许剑伟 莆田十中 function add(a,b,n){ //多精度a对多精度b的相加算法(小学加法) for(var i=n-1,f=0;i>=0;i--){ a[i]+=b[i]+f; if(a[i]>=10000000000) a[i]-=10000000000,f=1; else f=0; } } function sub0(a,b,r,n){ //多精度a对多精度b的相减算法(小学减法) for(var i=n-1,f=0;i>=0;i--){ r[i]=a[i]-b[i]-f; if(r[i]<0) r[i]+=10000000000,f=1; else f=0; } } function div(a,b,n){ //多精度a与单精度b相除算法(小学除法) for(var i=0,f=0,c;i<n;i++){ c=a[i]+f*10000000000; a[i]=Math.floor((c+0.1)/b); f=c%b; } } function dao(a,f,b,n){ //倒数(f/b) a[0]=Math.floor(f/b); f=f%b; for(var i=1,c;i<n;i++){ c=f*10000000000; a[i]=Math.floor((c+0.1)/b); f=c%b; } } function set(a,v,n){ for(var i=0;i<n;i++) a[i]=0; a[0]=v; a.length=n;} //给数组置0并给首位置初值v//以下计算圆周率,计算公式:Machin PI=16arctg(1/5)-4arctg(1/239) var a=new Array(),b=new Array(),c=new Array(); //三个工作数组,a存PI,b存arctg,c是临时数组 function arctg(k,v,zf,N){//求v*arctg(k),zf表示结果累加到a时的正负号 for(var i=Math.round(N*23.1/Math.log(k*k)),n=i,n2;i>=0;i--){ n2=Math.round((n-i)*N/n)+1; //末项计算位数控制 if(n2>N) n2=N; dao(c,v,2*i+1,n2); div(b,k*k,n2); sub0(c,b,b,n2); } div(b,k,N); if(zf>0) add(a,b,N); else sub0(a,b,a,N); } function pi(N){ //N为计算的位数,本程序所得最后5位可能有错 set(a,0,N); set(b,0,N); //PI结果数组及arctg数组,初值为0 arctg(5,16,1,N); arctg(239,4,-1,N); for(var i=1;i<N;i++) a[i]=String(10000000000+a[i]).substr(1,10); //补足10位 return a.join(""); } function js(){ ca.innerHTML="最后5位可能有错:PI="+pi(Nw.value-0+1); } //在网页上输出
链接:http://www.fjptsz.com/xxjs/xjw/rj/112/pi23.htm
转载于:https://www.cnblogs.com/ddw1997/p/3946505.html
使用Machin公式计算相关推荐
- 用Machin公式计算圆周率的源程序
用Machin公式计算圆周率的源程序 /* Program to compute PI, by Jason Chen, May 1999 ** ** Open VC++ IDE, new a win3 ...
- Machin(梅钦/马青)公式计算圆周率π
作为一名计算机的初学者,因为老师作业的要求去完成圆周率的计算,因此突然产生了兴趣,想尝试自己用梅钦公式来完成这个任务.上网找了一些资料,也看见了短短几行就完成任务的代码,实在佩服,不过那样的代码实在对 ...
- python用bbp公式计算圆周率_圆周率π现在已经算到多少位了?具体是什么数字?...
圆周率π现在已经算到多少位了?具体是什么数字? 來源:互聯網 2009-08-12 07:01:36 評論 分類: 人文學科 問題描述: 3.1415926后面是多少? 參考答案: 3.14159 ...
- Python利用马青公式计算圆周率Π并写入文件
一.什么是马青公式 马青公式由英国天文学教授约翰·马青(John Machin ,1686 –1751)于1706年发现,他利用这个公式计算到了100位的圆周率. 马青公式每计算一项可 ...
- matlab 流程计算方法,吸波材料LLG公式计算复磁导率的过程及matlab程序
看到一篇paper,利用Landau-Lifshitz-Gilbert 公式计算片状颗粒的复磁导率.(JAP 107,033913, 2010) http://scitation.aip.org/co ...
- c语言根据日期算星期几入门,c语言详解 蔡勒(Zeller)公式计算某一天是星期几 极其方便...
/* 蔡勒(Zeller)公式计算某一天是星期几 w:星期:c:(年份前两位):y:年(年份后两位):m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1.2月要看作上一年的13.14月 来计 ...
- excel公式不自动计算_c++通用面积计算公式_excel 公式计算 c++
刚刚开通了博客,今天正好有时间来完成自己的第一篇博客文章.希望对有需要的朋友有所帮助. 今天写了一个小代码:计算任意多边形的面积.临近毕业,毕设也忙得很,还好最近完成的差不多了,就差写论文了,今天突然 ...
- 中用BBP公式计算_【真课堂】7年级信息技术:数据计算
教师介绍: 汪小红,一级教师,滨江区科技节scratch项目优秀指导教师,曾获杭州市信息技术优质课二等奖. [教材分析] 数据计算是数据处理过程中的一个重要步骤,数据计算能对数据进行归纳和提炼.学生已 ...
- 中用BBP公式计算_散户如何计算庄家的持仓量和持仓成本?
计算庄家的持仓量和持仓成本,可以帮助散户判断庄家目前的坐庄过程处于何种阶段.如果庄家处于建仓阶段,散户就应该找机会跟进:如果庄家处于出货阶段,散户就应该赶快抛出手中筹码. 一:计算庄家持仓量 在股市交 ...
最新文章
- golang中的flag模块小结
- NTLDR is missing解决方法
- Linux Kobject
- Jtopo Demo源码下载方式
- 【转】Leopard 安装教程
- html鼠标自动点击代码,网上学习鼠标10分钟自动点击 按键精灵使用设置方法 脚本编辑...
- 机械制造技术基础【3】
- linux 搜狗输入法变繁体字,搜狗输入法变成繁体字怎么办
- pandas警告SettingWithCopyWarning: A value is trying to ...原理和解决方案
- 谈谈 MVX 中的 Model
- 网络编程:网络协议简介
- 【DB宝14】在Docker中只需2步即可拥有Oracle 11g企业版环境(11.2.0.4)
- 《Learn python3 the hard way》ex42到ex43总结
- 二叉树 html模板,用 DOM 与 CSS 展示二叉树
- jquery.nicescroll.js 美化滚动条
- 三重邪骨手机版怎么登录服务器未响应,三重邪骨锁血版
- mysql workbench6.3.7_mysql workbench官方版
- 淘宝/天猫邻家好货 API 返回值说明
- alter diskgroup <磁盘组名> check all norepair;
- 一次网站的性能优化之路 -- 天下武功,唯快不破
热门文章
- django celer_Celer招募Zing作为下一代基于Java的交易平台
- 用css伪元素制作箭头图标
- Type mismatch: inferred type is T but ViewModel was expected
- python delta_Python 函数
- java criterion_hibernate Criterion和Criteria
- 2022-2027中国内科缝合线行业应用形势与需求前景预测报告
- Pathon的安装过程
- Python网络爬虫:爬取腾讯招聘网职位信息 并做成简单可视化图表
- 1号线彭埠站故障已经查明 是积水导致转辙机信号不良
- Scrm营销如何自动化打标签