社区
数据结构与算法
帖子详情
求教一个计算圆周率的最优算法
dengcainiao
2002-05-10 07:05:28
写谢谢
...全文
72
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)掌握数值数据的常用运算,并熟练运用运算规则。(2)利用Python语言编程实现
计算圆周率
的
算法
,探究和理解程序的选择结构和循环结构。(3)熟练应用选择结构和循环结构实现简单
算法
,并感受不同
算法
的效率。■教学准备(1)软硬件环境...
python 实现用蒙特卡洛方法
计算圆周率
PI
算法
蒙特卡洛方法是一种基于随机数的数值计算方法,它通过大量随机试验来求解数学问题。在
计算圆周率
π时,
一个
经典的蒙特卡洛方法是利用单位正方形内切圆的面积比例。具体
算法
如下:
算法
步骤初始化:设置随机试验的总次数N(N越大,结果越精确)。初始化在圆内的点数计数inside_circle = 0。随机试验:对于每
一个
试验(从1到N):在区间[0, 1]内随机生成两个数x和y,代表单位正方形内的
一个
点(x, y)。检查点(x, y)是否位于单位圆内(即检查x^2 + y^2 <= 1是否成立)。
Python编写:用Chudnovsky
算法
计算圆周率
在上面的代码中,我们使用了Python的decimal模块来保证高精度计算。首先,我们使用getcontext().prec将精确度设定为num+1,表示我们将保留小数点后num位。我们使用max_k计算出需要求和的最大项数,然后用循环迭代计算每一项的值,并将它们加入sum中。本文介绍如何使用Python中的Chudnovsky
算法
来
计算圆周率
,并提供完整的源代码。通过上面的代码示例,我们可以使用Python并结合Chudnovsky
算法
实现高精度
计算圆周率
π,并且可以设置需要保留的小数点位数。
BBP
算法
计算圆周率
(BBP Formula HDU - 6217)
BBP
算法
计算圆周率
(BBP Formula HDU - 6217)概述公式推导 概述 BBP
算法
求圆周率π,它的优点在于可以直接求出圆周率的某一位d开始的一串数字,而不依赖于第d位之前的数字,传统的
算法
需要一位位地求。BBP
算法
节省了一大部分时间和内存,但BBP所求的圆周率是用16进制表示的。 公式推导 核心公式: π=∑k=0∞{116k(48k−1−28k+4−18k+5−18k+6)}\pi =\sum_{k=0}^{\infty}\left \{ \frac{1}{16^{k}}(\frac
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章