随即数.cpp

来自「编制随机数生成程序」· C++ 代码 · 共 76 行

CPP
76
字号
// 随即数.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<time.h>
#include<iostream.h>
//随机数类
const unsigned long maxshort=65536L;
const unsigned long multiplier=1194211693L;
const unsigned long adder=12345L;
class RandomNumber
{private:
  //当前种子
 unsigned long randSeed;
public:
	//构造函数,缺省值0表示由系统自动产生种子
RandomNumber(unsigned long s=0);
   //产生0:n-1之间的随机整数
unsigned short Random(unsigned long n);
   //产生[0,1)之间的随机实数 
double fRandom(void);
};
//产生种子
RandomNumber::RandomNumber(unsigned long s)
{if(s==0)
  randSeed=time(0);//用系统时间产生种子
else
   randSeed=s;//由用户提供种子
}
//产生0:n-1之间的随机整数
unsigned short RandomNumber::Random(unsigned long n)
{randSeed=multiplier*randSeed+adder;
 return(unsigned short)((randSeed>>16)%n);
}
//产生[0,1)之间的随机实数
double RandomNumber::fRandom(void)
{
	return Random(maxshort)/double(maxshort);
}
double f(double x)
{
	double s=x*x;
return s;}
double Darts(int n)
{//用随即投点方法计算pai的值
	static RandomNumber dart;
	int k=0;
	for(int i=1;i<=n;i++)
	{double x=dart.fRandom();
	 double y=dart.fRandom();
	 if((x*x+y*y)<=1) k++;
	}
	return 4*k/double(n);
}
double Darts1(int n)
{//用随机投点法计算定积分
static RandomNumber dart;
int k=0;
for(int i=1;i<=n;i++)
	{double x=dart.fRandom();
	 double y=dart.fRandom();
	 if(y<=f(x)) k++;
}
return k/double(n);
}


main()
{int n;
double a;
for(int i=0;i<=3;i++)
{cin>>n;
 a=Darts1(n);
 cout<<"a="<<a<<endl;
}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?