
1、PI 的值可以通过以下公式计算出来,
π/4=1-1/3+1/5-1/7……
编写循环程序,当这种计算方法所得到的偏差小于0.000001时停止计算,并输出PI的值及所需要计算的项数。
2、例程:
double s = 0//面积double pi = 0//圆周率
double d=200//直径(值越大圆周率越精确)
double r = d/2//半径
for(int i=1i<=di++){
for(int j=1j<=dj++){
if((i-r)*(i-r)+(j-r)*(j-r)<=r*r){
历滑物 s++
肢液 }
}
让野 }
pi = s/(r*r)
一个足以让渗伏你吐血的计算400位pi的C程序:int a=10000, b, c=2800, d, e, f[2801], g
main() {
for(b-cf[b++]=a/5)
for(d=0,g=c*2c -=14,printf("%.4d"纯渗,e+d/a),e=d%a)
for(b=cd+=f[b]*a,f[b]=d%--g,d/=g--,--bd*=b)
}
理论上只要用大数算法扩了就能一直算下去。我在Palm上面实现的那个就是基于这个算法,没有扩,算到4680位(受到Palm平台32k数组的长度限制)。
这个程序的特点是:你抱着想看看算pi原理的希望来读这个程序,结果发现就是看了也还是看不懂~~
转的,但是百度知道不允许贴地址哦
第二种:
用C语言编程π*π/6=1/1*1+1/2*2+1/3*3+。。。+1/n*n
#include<stdio.h>
#include<math.h>
main()
{
int n,i
double s=0
printf("输入n:")
scanf("%d",&n)
for(i=1i<=ni++)
{s=s+1.0/(i*i)
}
printf("pai=%f",sqrt(s*6))
}
第三种:
求pi=(1+1/做喊脊(1*3))*(1+1/(3*5))*(1+1/(5*7))…………直到最后一项的分数小于10的负6次方为止。
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
void main()
{
double pi,i,j,sigh,term
i=1,j=3,sigh=1,term=1
while(sigh>1e-6)
{
sigh=1/(i*j)
term=(1+sigh)*term
i=i+2
j=j+2
}
pi=term
printf("pi=%f\n",pi)
}
我写过精确10000多位的,但代码太多无法在此列出,我给你提供一个思路:定义长度为固定值销绝的字节的数组当做一个“大整数型”,长度为BI_SIZE,数组的0号数为最低8位,往后是更高8位,以此类推。
考虑计算过程中的溢出问题,BI_SIZE要尽量大,但也不能太大,否则算得会很慢。
#define
BI_SIZE
128
定义小数点后的十进制位数PI_NUM,略大于100。
#define
PI_NUM
103
uint8_t
R0[BI_SIZE]
uint8_t
R1[BI_SIZE]
uint8_t
R2[BI_SIZE]
……
用户使用的寄存器如下:
uint8_t
a0[BI_SIZE]
uint8_t
a1[BI_SIZE]
uint8_t
a2[BI_SIZE]
……
定义大整数相关处理函数,包含拷贝、清零、比大小、加、减、乘、移位、除、转十进制ascii等函数。
比如大整数比大小,相等返回0,a大返回1,b大返回-1。
int
BigInteger_Cmp(uint8_t
*a,uint8_t
*b)
{
uint32_t
i
for(i
=
BI_SIZE
-
1i
<
BI_SIZEi
--)
{
if(a[i]
!=
b[i])
{
if(a[i]
>
b[i])
return
1
else
return
-1
}
}
return
0
}
凡是运算函数都要使用输入地址的方式,如大整数相加,将a与b相加后的值装入地址c。
void
BigInteger_Add(uint8_t
*c,uint8_t
*a,uint8_t
*b)
调用每一慎扰个函数时,输出寄存器不能与输入寄存器冲突。
写除法函数可能比较难,请参考二进制除法相关资料。
打印函数可以用连续除以10求余获得。
函数准备完成后就可以算圆周率了,先用循环算出10的PI_NUM次方作为标准系数EXP[BI_SIZE],计算每一项时分子要先乘EXP再除。由于你的级数公制性质,建议乘和除交替进行,以免数字溢亏孝姿出。
每一项不断累加起来,直到当前算得的项为0为止,累加结果转十进制打印出来。
调试时PI_NUM可以先改小,如果数字正确,就可以改为100多了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)