社区
数据结构与算法
帖子详情
求教一个计算圆周率的最优算法
dengcainiao
2002-05-10 07:05:28
写谢谢
...全文
71
10
打赏
收藏
求教一个计算圆周率的最优算法
写谢谢
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Tice
2002-05-20
打赏
举报
回复
那要算多久?
qtf
2002-05-12
打赏
举报
回复
这么厉害!!!
10亿?
xuying
2002-05-11
打赏
举报
回复
上面的程序可以算任意位。
xuying
2002-05-11
打赏
举报
回复
#include<stdio.h>
#include<stdlib.h>
#define Fcalloc calloc
#define Ffree free
#define Size_T unsigned long
long kf, ks;
long *mf, *ms;
long cnt, n, temp, nd;
long i;
long col, col1;
long loc, stor[21];
void shift(long *l1, long *l2, long lp, long lmod) {
long k;
k = ((*l2) > 0 ? (*l2) / lmod: -(-(*l2) / lmod) - 1);
*l2 -= k * lmod;
*l1 += k * lp;
}
void yprint(long m) {
if (cnt<n) {
if (++col == 11) {
col = 1;
if (++col1 == 6) {
col1 = 0;
printf("\n");
printf("%4ld",m%10);
}
else printf("%3ld",m%10);
}
else printf("%ld",m);
cnt++;
}
}
void xprint(long m) {
long ii, wk, wk1;
if (m < 8) {
for (ii = 1; ii <= loc; )
yprint(stor[(int)(ii++)]);
loc = 0;
}
else {
if (m > 9) {
wk = m / 10;
m %= 10;
for (wk1 = loc; wk1 >= 1; wk1--) {
wk += stor[(int)wk1];
stor[(int)wk1] = wk % 10;
wk /= 10;
}
}
}
stor[(int)(++loc)] = m;
}
void memerr(int errno) {
printf("\a\nOut of memory error #%d\n", errno);
if (2 == errno)
Ffree(mf);
_exit(2);
}
int main(int argc, char *argv[]) {
int i=0;
char *endp;
printf("\n");
printf("PI Caculater made by Godman\n");
printf("$Id: pi.c 1.14 1998/12/03 15:04:23 GUOXM Exp $\n");
printf("==============================================\n");
stor[i++] = 0;
if (argc < 2) {
puts("\aUsage: PI <number_of_digits>");
return(1);
}
n = strtol(argv[1], &endp, 10);
if (NULL == (mf = Fcalloc((Size_T)(n + 3L), (Size_T)sizeof(long))))
memerr(1);
if (NULL == (ms = Fcalloc((Size_T)(n + 3L), (Size_T)sizeof(long))))
memerr(2);
printf("\nApproximation of PI to %ld digits\n", (long)n);
cnt = 0;
kf = 25;
ks = 57121L;
mf[1] = 1L;
for (i = 2; i <= (int)n; i += 2) {
mf[i] = -16L;
mf[i+1] = 16L;
}
for (i = 1; i <= (int)n; i += 2) {
ms[i] = -4L;
ms[i+1] = 4L;
}
printf("\n 3.");
while (cnt < n) {
for (i = 0; ++i <= (int)n - (int)cnt; ) {
mf[i] *= 10L;
ms[i] *= 10L;
}
for (i =(int)(n - cnt + 1); --i >= 2; ) {
temp = 2 * i - 1;
shift(&mf[i - 1], &mf[i], temp - 2, temp * kf);
shift(&ms[i - 1], &ms[i], temp - 2, temp * ks);
}
nd = 0;
shift((long *)&nd, &mf[1], 1L, 5L);
shift((long *)&nd, &ms[1], 1L, 239L);
xprint(nd);
}
printf("\n\n======================\n");
printf("Calculations Completed!\n");
printf("You can fine this program and source code in ftp://166.111.18.56\n");
Ffree(ms);
Ffree(mf);
return(0);
}
kingfighter_han
2002-05-11
打赏
举报
回复
o
NowCan
2002-05-11
打赏
举报
回复
10亿位的都见过。
Tice
2002-05-10
打赏
举报
回复
我又看过了,最多可以算到3335万位
Tice
2002-05-10
打赏
举报
回复
我知道有个叫super pi的程序,可以算到100多万位
one_add_one
2002-05-10
打赏
举报
回复
最优的我不知道,比较好的,我到时知道几个。
atlantis13579
2002-05-10
打赏
举报
回复
肯定不是最优算法,但可以算.
long a=10000,b,c=2800,d,e,f[2801],g;
main(){for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);}
Python 蒙特卡洛方法
计算圆周率
PI
算法
详解及源码
在
计算圆周率
π的问题中,蒙特卡洛方法可以通过随机抽样点的方法来估计圆的面积,从而近似计算出π的值。在
计算圆周率
π的问题中,蒙特卡洛方法可以通过随机抽样点的方法来估计圆的面积,从而近似计算出π的值。在...
圆周率计算程序图计算机基础知识,沪教版(2019)高中信息技术 必修1 项目七 用计算机
计算圆周率
——设计简单数值数据
算法
教案(3课时)...
沪教版(2019)高中信息技术 必修1 项目七 用计算机
计算圆周率
——设计简单数值数据
算法
教案(3课时)项目七 用计算机
计算圆周率
——设计简单数值数据
算法
■学习目标.(1)掌握数值数据的常用运算,并熟练运用运算规则。...
python 实现用蒙特卡洛方法
计算圆周率
PI
算法
在
计算圆周率
π时,
一个
经典的蒙特卡洛方法是利用单位正方形内切圆的面积比例。具体
算法
如下:
算法
步骤初始化:设置随机试验的总次数N(N越大,结果越精确)。初始化在圆内的点数计数inside_circle = 0。随机试验:...
Python编写:用Chudnovsky
算法
计算圆周率
本文介绍如何使用Python中的Chudnovsky
算法
来
计算圆周率
,并提供完整的源代码。通过上面的代码示例,我们可以使用Python并结合Chudnovsky
算法
实现高精度
计算圆周率
π,并且可以设置需要保留的小数点位数。
BBP
算法
计算圆周率
(BBP Formula HDU - 6217)
BBP
算法
计算圆周率
(BBP Formula HDU - 6217)概述公式推导 概述 BBP
算法
求圆周率π,它的优点在于可以直接求出圆周率的某一位d开始的一串数字,而不依赖于第d位之前的数字,传统的
算法
需要一位位地求。BBP
算法
节省...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章