思想:
在0到1之间取两个随机数,如果这两个随机数(x,y)在四分之一圆内,就加一。
最后用落在圆内的点数,除以总点数,就是PI了。
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
#define N 300000
main()
{
long i,n=0
float x,y,pi
srand(time(NULL))
for (i=0i<Ni++)
{
x=1.0*rand()/RAND_MAX
y=1.0*rand()/RAND_MAX
if (x*x+y*y<1)
n++
}
pi=4.0*n/N
printf("pi=%f\n",pi)
getch()
}
//C语言实现如下:
double binary_PI(int n)
{
double result = 1.0
int i = 0
for (i=1 i<=n i++)
result *= (1.0+1.0/((2*i-1)*(2*i+1)))
return result
}
int main()
{
int n = 200
printf("PI/2 = %lf\n", binary_PI(n))
return 0
}
运行结果:
希望对您有所帮助!!
数值概率算法具有随机性 建议不用
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
double getPI(int n)
void main()
{
double PI
int n
printf("Please enter the number of random points for test\n")
scanf("%d",&n)
PI=getPI(n)
printf("The similar value of PI is\n%f\n",PI)
getchar()
}
double getPI(int n)
{
int inCircle=0
float x,y
int count=n
while(count)
{
x=random(101)
y=random(101)
if(x*x+y*y<=10000)
inCircle++
count--
}
return 4.0*inCircle/n
}
赠送割圆术解法
#include <string.h>
#include <stdio.h>
#include <math.h>
double getPI(int n)
void main()
{
int n
double PI
printf("Please enter accuracy\n")
scanf("%d",&n)
PI=getPI(n)
printf("The similar value of PI is\n%f\n",PI)
getchar()
}
double getPI(int n)
{
int div,i=4
double b=sqrt(2)/2.0
double c=0.0
for(div=0div<ndiv++)
{
b=sqrt(2.0-2.0*sqrt(1.0-b*b))*0.5
i=i*2
}
c=b*i
return c
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)