
用的是如图的公式,下面是arctg展开的级数。
这个输出没有写好,一组是10位,如果前面是“0”就会少了,要完善一下。
N是定义 算多少组的,N=1000 时 N10就是10000组,要算到100万位这种算法要好长时间,但是这是最简单的算法之一。
下面分成三个部分,第一是定义数组和
#define N 1000
#include "mathh"
#include "stringh"
main()
{
auto double a1,b1,b2,c1,d,i=10,q=-10;
auto double n,g,r=100000000000;
static double a[N+1],b[N+1],c[N+1];
auto char str3,str1[15],strs1[11N],p_strs1;
auto long p,j,k=1,m=1;
do {
printf("input p= ");
scanf("%ld",&p);
} while(p<=0 && p>100);
p = p + 1;
b[1]=r200,c[1]=239r;
do
{ q=-q,a1=0,b1=0,c1=0;
for(j=m;j<=p;j++){c1=c[j]+c1r,c[j]=floor(c1/57121),c1=c1-c[j]57121;}
if (c[m]<1e-5) m++;
for(j=k;j<=p;j++){
a1=b[j]+a1r,b[j]=floor(a1/250),a1=a1-b[j]250;
d=b1r+b[j]-c[j],b1=floor(d/i),a[j]=4qb1+a[j];
b1=d-b1i;
}
if (b[k]<=1e-5) {
k++ ;
printf("k=%ld ",k);}
i = i + 2;
}while(m<=p);
do
{ q = -q, a1 = 0,b1 = 0;
for(j=k;j<=p;j++) {
a1=b[j]+a1r,b2=floor(a1/25),b[j]=b2;
a1=a1-b225,d=b2+b1r;
b1=floor(d/i),a[j]=a[j]+4qb1;
b1=d-b1i;
}
if (b[k]<=1e-5) { k++;printf(" k= %ld",k);}
i = i + 2;
}while(k<=p);
printf("\n");
for(j=p;j>=1;j--){g=a[j]+n,n=floor(g/r),a[j]=g-rn;}
for(j=1;j<p;j++) printf("%100f ",a[j]);
str3=strs1;
}
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int Decimal_Digits = 0;//小数点位数;
const int Side_Length = 1;// 代表我们 设定 圆的半径为1
double TT = 0; //初始化TT;
int Side_Number =9999; // 这是 我通过观察 设定的 初始化为10000边时候 得到的结果 很精确了
const double PI = 3141592654;
double Degree = 0;
double S = 0;
cout<<"请输入小数点位数:"<<endl;
cin>>Decimal_Digits;
for (int i = 0 ; i <=100 ; i ++ ,Side_Number++)
{
Degree = (3600/ Side_Number) / 180 PI;
S = 05 Side_Length Side_Length sin(Degree) Side_Number;
TT = S / (Side_Length Side_Length );
coutprecision(Decimal_Digits);
cout<<"利用割圆法计算TT"<<endl;
cout<<"当多边形边数为"<<Side_Number<<"时"<<" "
"计算的TT值为:"<<endl<<TT<<endl;
}
return 0 ;
}
说实话 如果不知道PI 的值 是 无法利用此方法计算的 这种方法只是来验证,
因为C ++ 中 sin cos 函数 所需要的变量 是 弧度 而不是度数;
我用的是割圆法:
版本 2
程序集 窗口程序集1
子程序 _时钟1_周期事件
局部变量 派, 双精度小数型
局部变量 单位面积, 双精度小数型
局部变量 原面积, 双精度小数型
局部变量 原边长, 双精度小数型
局部变量 边数, 双精度小数型
局部变量 多的面积, 双精度小数型
边数 = 边数 × 2
原边长 = 求次方 (求次方 (原边长 ÷ 2, 2) + 求次方 (1 - 求次方 (1 - 求次方 (原边长 ÷ 2, 2), 05), 2), 05)
原面积 = 原边长 × 求次方 (1 - 求次方 (原边长 ÷ 2, 2), 05) ÷ 2
多的面积 = (1 - 求次方 (1 - 求次方 (原边长 ÷ 2, 2), 05)) × 原边长 ÷ 2
单位面积 = 原面积 + 多的面积
派 = 边数 × 单位面积
编辑框1内容 = 到文本 (派)
编辑框2内容 = 到文本 (边数)
判断开始 (编辑框1内容 = “314159265359”)
时钟1时钟周期 = 0
默认
判断结束
子程序 __启动窗口_创建完毕
原边长 = 1
边数 = 6
时钟1时钟周期 = 10
这个程序只能算到小数点后11位,因为它的双精度小数型变量只能容纳15个半角字符。
算出来后编辑框显示314159265359,这是π的精确到小数点后11位的近似值。此外还能看算到多少边形了(在编辑框2里)。
这个比较出名的程序,三行语句求PI
按公式PI/2 = ∑ (n! / (2n+1)!!) 计算Pi
计算2800项就可以精确到小数点后800位
正常的写法
#include "stdioh"long b,c,d,e,f[2801];
void main()
{
for (int i = 0; i < 2800; i++) f[i] = 2000;
f[2800] = 0;
for (c = 2800; c > 0; c -= 14)
{
d = 0;
for (b = c; b > 0; b--)
{
d += f[b] 10000;
f[b] = d % (2b-1);
d /= (2b-1);
if (b > 1)
d = (b-1);
}
printf("%4d", e + d / 10000);
e = d % 10000;
}
}
#include<stdioh>
#include<mathh>
int main()
{double pi=1,t=0;
for(;t<19999999;)
{t=sqrt(2+t);
pi=2/t;
}
printf("%lf\n",pi2);
return 0;
}
sub form_load()
dim a,x as integer
dim pi as single
pi=0
for i=1 to 30000
x=((-1)^(i+1))(2i-1)
pi=1/x+pi
next i
print 4pi
end sub
“一定要能算到上千万位!”
你疯了吗?你学过计算机吗?怎么也不可能吧,一个32位pc机,用vb算? 用这个公式?
用牛顿迭代,vb仅能算到精确14位,速度还行,你这算法算6位电脑就卡爆了。c语言能好些,但也好不到哪去。
double s = 0;//面积
double pi = 0;//圆周率
double d=200;//直径(值越大圆周率越精确)
double r = d/2;//半径
for(int i=1;i<=d;i++){
for(int j=1;j<=d;j++){
if((i-r)(i-r)+(j-r)(j-r)<=rr){
s++;
}
}
}
pi = s/(rr);
以上就是关于C语言编程求圆周率全部的内容,包括:C语言编程求圆周率、求用割圆法求圆周率的C++程序源代码圆周率的位数由输入变量的值来确定。、用易语言怎么写算圆周率的代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)