我只想说这种方法求pi很不好,因为要精确到10^-6,需要做很多很多次循环,你可以尝试换别的公式来求pi,比如 pi=∑(4/(8n+1)-2/(8n+4)-1/(8n+5)-1/(8n+6))(1/16)^n
算法错误。程序思路非常混乱。n++只一次,并没有循环,那么一开始计算x0时n=1,以后每次计算x0的值时n都等于2。而计算公式是要对n进行累加循环的。
#include <stdioh>void main(){
double i,k=1;
for(i=1;k(i2i2/((i2-1)(i2+1))-1)>=1e-6;i++)
k=i2i2/((i2-1)(i2+1));
printf("PI=%2lf",k2);
}
#include<iostream>
#include<conioh>
using namespace std;
void main()
{
double dPI;//π
int iFenMu;//分母
int iFenZi;//分子
int iCount;//计数
int iSign;//记录正负号
//初始化各变量
iFenZi = 4;
iFenMu = 1;
iSign = 1;
dPI = 0;
for(iCount=1;iCount<=1000;iCount++)//用for语句实现
{
//公式π=4 – 4/3 + 4/5 – 4/7 + 4/9 -4/11 + … …
dPI += ((iSign)(((double)iFenZi)/((double)iFenMu)));//π的累加,相当于dPI=dPI+(((iSign)(((double)iFenZi)/((double)iFenMu))));
cout<<"PI["<<iCount<<"]="<<dPI<<" ";//输出第iCount项的值
if(iCount%4==0)
{
cout<<endl;
}
iFenMu+=2;//分母增加2
iSign=-iSign;//正负号交替变化
}
cout<<"Press any key to continue"<<endl;
getch();
iFenZi = 4;
iFenMu = 1;
iSign = 1;
dPI = 0;
iCount =1;
while(iCount<=1000)//用while语句实现
{
dPI += ((iSign)(((double)iFenZi)/((double)iFenMu)));
cout<<"PI["<<iCount<<"]="<<dPI<<" ";
if(iCount%4==0)
{
cout<<endl;
}
iFenMu+=2;
iSign=-iSign;
iCount++;
}
cout<<"Press any key to continue"<<endl;
getch();
iFenZi = 4;
iFenMu = 1;
iSign = 1;
dPI = 0;
iCount =1;
do//用do while语句实现
{
dPI += ((iSign)(((double)iFenZi)/((double)iFenMu)));
cout<<"PI["<<iCount<<"]="<<dPI<<" ";
if(iCount%4==0)
{
cout<<endl;
}
iFenMu+=2;
iSign=-iSign;
iCount++;
}while(iCount!=1001);
}
问题一:怎么样用电脑计算圆周率π 一、中国圆周率公式的分类
外国圆周率公式为高精度圆周率的计算立下了汗马功劳,并为许多数学人所熟习,但并不适合普通人使用,下面向数学爱好者和中学生们介绍一组中国人自己研究的普及型圆周率公式:
一基本公式:
⑴π=180°sinθMθ 、
⑵π=180°M(θ cscθ)、
⑶π=180°tgθMθ 、
⑷π=180°M(θ ctgθ) 、
(θ→0°θ>0°)
此类公式以圆内接或外切直角三角形或正多边形的边所对应的圆心角为计算依据,外形简单,计算方便,对圆周率的概括比较全面系统;同时,既是1弧度公式,又是1角度公式。
二派生公式:
⑸π=(n/2)sin(360°Mn) 、
⑹π=1M((2/n)csc(360°Mn)) 、
⑺π=(n/2)tg(360°Mn) 、
⑻π=1M((2/n)ctg(360°Mn)) 、
(n→∞, n≥5)
此类派生公式可以由基本公式导出或单独推导,并以圆内接或外切直角三角形数量为计算依据,是专用性、针对性较强的圆周率公式。
三派生公式:
⑼π=nsin(180°Mn) 、
⑽π=n/csc(180°Mn) 、
⑾π=ntg(180°Mn) 、
⑿π=n/ctg(180°Mn) 、
(n→∞,n≥3)
此类派生公式可以由基本公式导出或单独推导,并以圆内接或外切正多边形的边数为计算依据,是中国割圆术公式的典型代表。
四专业公式:
⑴π=2^n√(2-√(2+…√2+)…)
⑵π=3×2^n√(2-√(2+…√(2+√3)…)
⑶π=2×2^n√(2-√(2+…√2+)…)/√(2+√(2+…√2+)…)
⑷π=6×2^n√(2-√(2+…√3)…)/√(2+√(2+…√3)…)
(n→∞,根式中有n个2)
专业公式可由基本公式或倍边公式推导,它们是割圆术公式的最高形式,是以圆内接或外切正四边形或正六边形为基础,不断分割至无穷,从而得到适合专家们使用的表达式。
根据以上公式和三角函数间的关系,还可导出更为复杂一些的圆周率公式。
二、中国圆周率的计算
在圆周率的日常应用中,我们根本不需要对其进行计算,因为数学家已经计算好了,直接拿来运用即可;但对于数学爱好者和中学生来说,亲自动手计算圆周率,将会进一步加深对圆周率的理解。
在计算机发明以前,圆周率的计算主要是靠手工计算和其他简易工具的计算,今天我们可以直接运用计算机或计算器进行计算,计算器的精度一般在10位左右,计算机上的计算器精度一般在30或60位左右,如果需要数以万计、亿计的精度,则需要将三角函数原始公式代入,转换成专业公式并编制专用程序进行计算即可,这里只是简单介绍常规计算。
圆周率公式非常多,我们只取其中几个最简单的中国圆周率公式进行讲解:
⑴ π=180°sinθMθ 、
⑵ π=180°tgθMθ 、
(θ→0°θ>0°)
一模拟计算正24576边形的圆周率(祖率)
∵ θ=180°M24576=0007324219°
∴ ⑴ π=180°sinθMθ
=180°×sin0007324219°M0007324219°
=180°×00001278317363M0007324219°
=31415926
∴ ⑵ π=180°tgθMθ
=180°×tg0007324219°M0007324219°
=180°×00001278317374M0007>>
问题二:怎么才能用家用电脑来计算圆周率 I AGREE WITH HER
问题三:求一组能够让计算机计算圆周率的cmd命令 30分]@]@]
echo off&setlocal enabledelayedexpansion
echo %time%
set /a a=10000,c=500
::c是位数
(set /a a/=5,c=c/414-1
for /l %%a in (1 1 !c!) do set f[%%a]=!a!
for /l %%i in (!c! -14 0) do (
for /l %%j in (%%i -1 1) do (
set /a d+=f[%%j]%a%,f[%%j]=d%%(%%j2+1^),d=d/(%%j2+1^)%%j
)
set /a c=a+d/%a%,a=d%%%a%+%a%,d=0
set /p=!c:~-4!
)
) 问题四:测试电脑的性能都让它跑圆周率吗 怎么让电脑跑圆周率呢 跑圆周率只是测试CPU性能 我给你一个软件dlpconline/1
问题五:怎么利用圆周率测试电脑速度 计算圆周率基本上测试不出电脑的性能,但你可以试一下。
以下是一个计算圆周率的C程序
算法是用泰勒公式计算反正切值。在命令行不跟参数执行该程序则使用Gauss公式计算前1000位圆周率的值,如果带一个命令行参数,则该值为要计算的位数。如果还有第二个命令行参数,则使用Stomer公式计算,可作为验算。因为该程序只涉及到纯数学计算,可以在Linux、Unix、Windows等 *** 作系统下编译并运行。当时写这个程序时,int是2个字节的,现在大多数的C编译器int都是4个字节,不过这不影响程序的正确性。
#include
#include
main(int argc, char argv[])
{
long pi, t, m, n, r, s;
int t0[][3] = {48, 32, 20, 24, 8, 4}, k0[][3] = {1, 1, 0, 1, 1, 1};
int n0[][3] = {18, 57, 239, 8, 57, 239}, d, i, j, k, p, q;
d = (argc > 1) (((i = atoi(argv[1])) 2) 1 : 0;
printf(%s\n\n, Nature (R) Pi value pute Program (C) Tue 19991130);
printf(pi= %s%d arctg(1/%d) s %d arctg(1/%d) %s %d arctg(1/%d) [%s]\n,
k0[q][0] : -, t0[q][0], n0[q][0], k0[q][1] + : -, t0[q][1],
n0[q][1], k0[q][2] + : -, t0[q][2], n0[q][2], q Stomer : Gauss);
if ((t = (long )calloc((d += 5) + 1, sizeof(long))) == NULL) return 1;
if ((pi = (long )calloc(d + 1, sizeof(long))) == NULL) return 2;
for (i = d; i >= 0; i--) pi[i] = 0;
for (p = 0; p = 0; i--) t[i] = 0;
for (r = 0, i = j; i >= 0; i--) {
r = (m = 10 r + t[i]) % n;
t[i] = m / n;
k (pi[i] += t[i]) : (pi[i] -= t[i]);
}
while (j > 0 && t[j] == 0) j--;
for (k = !k, s = 3>>
问题六:现代计算机是如何计算圆周率的? 圆周率是一个极其驰名的数。从有文字记载的历史开始,这个数就引进了外行人和学者们的兴趣。作为一个非常重要的常数,圆周率最早是出于解决有关圆的计算问题。仅凭这一点,求出它的尽量准确的近似值,就是一个极其迫切的问题了。事实也是如此,几千年来作为数学家们的奋斗目标,古今中外一代一代的数学家为此献出了自己的智慧和劳动。回顾历史,人类对 π 的认识过程,反映了数学和计算技术发展情形的一个侧面。 π 的研究,在一定程度上反映这个地区或时代的数学水平。德国数学史家康托说:历史上一个国家所算得的圆周率的准确程度,可以作为衡量这个国家当时数学发展水平的指标。直到19世纪初,求圆周率的值应该说是数学中的头号难题。为求得圆周率的值,人类走过了漫长而曲折的道路,它的历史是饶有趣味的。我们可以将这一计算历程分为几个阶段。
实验时期
通过实验对 π 值进行估算,这是计算 π 的的第一阶段。这种对 π 值的估算基本上都是以观察或实验为根据,是基于对一个圆的周长和直径的实际测量而得出的。在古代世界,实际上长期使用 π =3这个数值。最早见于文字记载的有基督教《圣经》中的章节,其上取圆周率为3。这一段描述的事大约发生在公元前950年前后。其他如巴比伦、印度、中国等也长期使用3这个粗略而简单实用的数值。在我国刘徽之前圆径一而周三曾广泛流传。我国第一部《周髀算经》中,就记载有圆周三径一这一结论。在我国,木工师傅有两句从古流传下来的口诀:叫做:周三径一,方五斜七,意思是说,直径为1的圆,周长大约是3,边长为5的正方形,对角线之长约为7。这正反映了早期人们对圆周率 π 和√2 这两个无理数的粗略估计。东汉时期官方还明文规定圆周率取3为计算面积的标准。后人称之为古率。
早期的人们还使用了其它的粗糙方法。如古埃及、古希腊人曾用谷粒摆在圆形上,以数粒数与方形对比的方法取得数值。或用匀重木板锯成圆形和方形以秤量对比取值……由此,得到圆周率的稍好些的值。如古埃及人应用了约四千年的 4 (8/9)2 = 31605。在印度,公元前六世纪,曾取 π= √10 = 3162。在我国东、西汉之交,新朝王莽令刘歆制造量的容器DD律嘉量斛。刘歆在制造标准容器的过程中就需要用到圆周率的值。为此,他大约也是通过做实验,得到一些关于圆周率的并不划一的近似值。现在根据铭文推算,其计算值分别取为31547,31992,31498,32031比径一周三的古率已有所进步。人类的这种探索的结果,当主要估计圆田面积时,对生产没有太大影响,但以此来制造器皿或其它计算就不合适了。
几何法时期
凭直观推测或实物度量,来计算 π 值的实验方法所得到的结果是相当粗略的。
真正使圆周率计算建立在科学的基础上,首先应归功于阿基米德。他是科学地研究这一常数的第一个人,是他首先提出了一种能够借助数学过程而不是通过测量的、能够把 π 的值精确到任意精度的方法。由此,开创了圆周率计算的第二阶段。
圆周长大于内接正四边形而小于外切正四边形,因此 2√2 < π < 4 。
当然,这是一个差劲透顶的例子。据说阿基米德用到了正96边形才算出他的值域。
阿基米德求圆周率的更精确近似值的方法,体现在他的一篇论文《圆的测定》之中。在这一书中,阿基米德第一次创用上、下界来确定 π 的近似值,他用几何方法证明了圆周长与圆直径之比小于 3+(1/7) 而大于 3 + (10>>
问题七:如何用计算机(电脑)计算π const ARRSIZE=1010,DISPCNT=1000; 定义数组大小,显示位数
char x[ARRSIZE],z[ARRSIZE]; x[0] x[1] x[2] x[3] x[4] x[ARRSIZE-1]
int a=1,b=3,c,d,Run=1,Cnt=0;
memset(x,0,ARRSIZE);
memset(z,0,ARRSIZE);
x[1] = 2;
z[1] = 2;
while(Run && (++Cnt0; i--)
{
c = z[i]a + d;
z[i] = c % 10;
d = c / 10;
}
z/=b;
d = 0;
for(int i=0; i0; i--)
{
c = x[i] + z[i];
x[i] = c%10;
x[i-1] += c/10;
Run |= z[i];
}
a++;
b+=2;
}
Memo1->Text = AnsiString()sprintf(计算了 %d 次\r\n,Cnt);
Memo1->Text = Memo1->Text + AnsiString()sprintf(Pi=%d%d\r\n,x[0],x[1]);
for(int i=0; iText = Memo1->Text + \r\n;
Memo1->Text = Memo1->Text + (int)x[i+2];
}
函数的原理:
pi=1 - 1/2 + 1/4 - 1/6 + 1/8 - 1/10 +
无穷多项之和就等于pi,一般算到最后一项小于一定的数值即可,那就是精度,程序中的2e-6,当然也可以用1e-6或者1e-8等。
关键是数学知识,而不是计算机的知识
>
以上就是关于程序设计:求PI全部的内容,包括:程序设计:求PI、C语言程序设计,计算π的近似值、用C++编程计算π等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)