首页 > 编程语言 >今天无聊弄得C++

今天无聊弄得C++

时间:2022-12-13 16:07:21浏览次数:49  
标签:Monte pi 多边形 无聊 C++ int 今天 PI Carlo


// chp2.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>

//数据结构
//数组(Array)、堆栈(Stack)、队列(queue)、链表(Linked List)、树(Tree)、图(Grahp)、堆(Heap)、散列表(Hash)

//
// 判断是否为2的n次幂
bool PowofTwo(int n)
{
return !(n & (n-1));
}

//
// 利用割圆术求pi的近似值, 假设有一个半径是1的圆,第一次切割在其内部内接正六边形。
// 正六边形的变长为y1, 根据几何知识,y1=1, 圆周长近似为L1=6*y1
// 第二次切割,在正六边形的基础上,扩展为12边形时,边长为y2, y2^2=2-sqrt(4-y1^2)
// pi≈3*2^n*yn
double cyclotomic(int n)
{
double k, yy;
int i;
long s;
double pi = 0.0f;

i = 1; //第一次切割
s = 6; //初始为6边形
yy = 1.0f;
k = 3.0f;
while (i<=n)
{
pi = k*sqrt(yy);
printf("第%d次切割,为正%ld多边形,PI近似为%.24f\n", i, s, pi);
s *= 2; //边数加倍
yy = 2-sqrt(4-yy); //内接多边形的变长的平方值
k *= 2.0f; //累积前面的系数3*2^n
i++;
}

return pi;
}

//
// 蒙特卡罗算法(Monte Carlo)
// 一个半径为1的圆,他在第一象限的1/4圆面积为pi/4
// 在上面接一个正方形,面积为1,两者相比pi/4, 概率算法
// 随即产生一个点,判断是不是在圆形区域,比上总点数,即为pi/4
double MontePI(int n)
{
int sum;
double pi;
double x, y;

sum = 0;
srand((unsigned)time(NULL));
for (int i=0; i<n; i++)
{
x = (double)rand()/RAND_MAX; //产生0~1的随机数
y= (double)rand()/RAND_MAX;

if ((x*x + y*y) <= 1)
sum++;
}

pi = 4.0*sum/n;
return pi;
}

int _tmain(int argc, _TCHAR* argv[])
{
int *pnums = new int[100];
memset(pnums, 0, 100);

srand((unsigned)time(NULL));
int num8;
int temp;
for (int i = 0; i<100; i++)
{
pnums[i] = rand()%500;
num8 = (pnums[i] + 0x7)&~0x7; //两种方法将数字提升到8的倍数
temp = (pnums[i] + 0x7)/8*8;

printf("%d->%d, %d", pnums[i], num8, temp);

if (PowofTwo(pnums[i]))
{
printf("--->pow of two");
}

printf("\n"); //换行
}

printf("\n\n");
//clean:
delete[] pnums;

//
//计算pi的近似值
printf("计算pi的近似值\n");
cyclotomic(12);

printf("\n\n");
for (int i=1; i<10; i++)
{
printf("Monte Carlo pi = %.24f\n", MontePI(i*1000) );
}

return 0;
}


392->392, 392


35->40, 40


51->56, 56


72->72, 72


245->248, 248


15->16, 16


158->160, 160


252->256, 256


158->160, 160


122->128, 128


154->160, 160


334->336, 336


82->88, 88


96->96, 96


192->192, 192


101->104, 104


116->120, 120


52->56, 56


94->96, 96


257->264, 264


58->64, 64


70->72, 72


337->344, 344


67->72, 72


382->384, 384


142->144, 144


25->32, 32


492->496, 496


14->16, 16


469->472, 472


217->224, 224


363->368, 368


387->392, 392


317->320, 320


233->240, 240


415->416, 416


199->200, 200


422->424, 424


217->224, 224


472->472, 472


184->184, 184


498->504, 504


92->96, 96


244->248, 248


172->176, 176


44->48, 48


133->136, 136


390->392, 392


440->440, 440


373->376, 376


341->344, 344


246->248, 248


214->216, 216


183->184, 184


465->472, 472


103->104, 104


83->88, 88


123->128, 128


141->144, 144


37->40, 40


71->72, 72


152->152, 152


333->336, 336


257->264, 264


62->64, 64


240->240, 240


170->176, 176


292->296, 296


490->496, 496


139->144, 144


32->32, 32--->pow of two


55->56, 56


190->192, 192


54->56, 56


376->376, 376


163->168, 168


35->40, 40


273->280, 280


233->240, 240


79->80, 80


21->24, 24


436->440, 440


59->64, 64


485->488, 488


4->8, 8--->pow of two


118->120, 120


97->104, 104


123->128, 128


383->384, 384


215->216, 216


482->488, 488


315->320, 320


369->376, 376


433->440, 440


102->104, 104


305->312, 312


290->296, 296


417->424, 424


451->456, 456


363->368, 368






计算pi的近似值


第1次切割,为正6多边形,PI近似为3.000000000000000000000000


第2次切割,为正12多边形,PI近似为3.105828541230249800000000


第3次切割,为正24多边形,PI近似为3.132628613281236900000000


第4次切割,为正48多边形,PI近似为3.139350203046872100000000


第5次切割,为正96多边形,PI近似为3.141031950890529800000000


第6次切割,为正192多边形,PI近似为3.141452472285344300000000


第7次切割,为正384多边形,PI近似为3.141557607911622100000000


第8次切割,为正768多边形,PI近似为3.141583892148935900000000


第9次切割,为正1536多边形,PI近似为3.141590463236761700000000


第10次切割,为正3072多边形,PI近似为3.141592106043048300000000


第11次切割,为正6144多边形,PI近似为3.141592516588154600000000


第12次切割,为正12288多边形,PI近似为3.141592618640789400000000






Monte Carlo pi = 3.192000000000000200000000


Monte Carlo pi = 3.206000000000000000000000


Monte Carlo pi = 3.173333333333333300000000


Monte Carlo pi = 3.141000000000000000000000


Monte Carlo pi = 3.138399999999999900000000


Monte Carlo pi = 3.133999999999999900000000


Monte Carlo pi = 3.129142857142857000000000


Monte Carlo pi = 3.123499999999999900000000


Monte Carlo pi = 3.125777777777778000000000


请按任意键继续. . .





标签:Monte,pi,多边形,无聊,C++,int,今天,PI,Carlo
From: https://blog.51cto.com/u_15911341/5934353

相关文章