产生某一范围的随机数

/*
This is a free Program, You can modify or redistribute it under the terms of GNU
*Description: 给定一定的范围和定时,如给定1000,定时为2s,输出到2s时产生的1000之内的随机数
*Language: C++
*Development Environment: VC6.0
*Author: Wangzhicheng
*E-mail: 2363702560@qq.com
*Date: 
2012/10/6*/

#include <iostream>
#include <ctime>

using namespace std;

class ShowRandom {
private:
	long Rang;   //显示随机数的范围
	int duration;  //持续时间


	void Producer() {   //显示随机数,在持续时间到来时终止
		clock_t start;
		clock_t end;

		int i;
		long n;
		srand(unsigned(time(0)));

		start=clock(); //获取此段代码开始时间
		while(true) {
			n=rand()%Rang;
			cout<<n;
			system("cls");
			for(int i=0;i<10000000;i++) ; //暂停一会
			end=clock();
			if(duration==int(end- start)/CLOCKS_PER_SEC) break;  //计算出持续时间
		}
		cout<<duration<<"秒之后产生的随机数是:"<<n<<endl;
	}
public:
	ShowRandom(long r,double d) {
		setRang(r);
		setDuration(d);
		Producer();
	}
	void setRang(long r) {
		Rang=r;
	}
	long getRang() const {
		return Rang;
	}

	
	void setDuration(int d) {
		duration=d;
	}
	long getDuration() const {
		return duration;
	}
};
void main() {
	ShowRandom(10000,60);
}
 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
产生一维正态分布随机数的常用方法是使用 Box-Muller变换或Marsaglia polar方法。这里我们以 Box-Muller变换为例,假设我们要产生均值为mu,标准差为sigma的正态分布随机数。 首先我们生成两个均匀分布随机数u1和u2,范围在(0,1)之间。然后通过下列公式转换为正态分布随机数: z1 = sqrt(-2 * log(u1)) * cos(2 * pi * u2) z2 = sqrt(-2 * log(u1)) * sin(2 * pi * u2) 其中z1和z2就是我们所需的正态分布随机数,它们的均值为mu,标准差为sigma。 接下来,我们可以使用Matlab或C++等计算机语言编写程序来生成正态分布随机数,并统计落在区间(2,5)上的概率。具体的步骤如下: 1. 设置参数mu和sigma,以及生成随机数的个数n。 2. 使用Box-Muller变换生成n个正态分布随机数。 3. 统计落在区间(2,5)上的随机数个数count。 4. 计算实际落在区间(2,5)上的概率p1 = count/n。 5. 计算理论上落在区间(2,5)上的概率p2,可以使用正态分布的概率密度函数计算。 6. 比较p1和p2,如果它们相差不大,则说明我们的程序成功地生成了正态分布随机数。 下面是Matlab代码的示例: ```matlab mu = 3; sigma = 1; n = 100000; u1 = rand(n, 1); u2 = rand(n, 1); z1 = sqrt(-2 * log(u1)) .* cos(2 * pi * u2); z2 = sqrt(-2 * log(u1)) .* sin(2 * pi * u2); z = mu + sigma * z1; count = sum(z > 2 & z < 5); p1 = count / n; p2 = normcdf(5, mu, sigma) - normcdf(2, mu, sigma); disp(['实际概率 = ', num2str(p1)]); disp(['理论概率 = ', num2str(p2)]); ``` 这个代码会生成100000个均值为3,标准差为1的正态分布随机数,并统计落在区间(2,5)上的随机数个数。最后,它会计算实际落在区间(2,5)上的概率和理论上落在区间(2,5)上的概率,并输出它们的值。 如果实际概率和理论概率相差不大,则说明我们的程序成功地生成了正态分布随机数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值