700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C++伪(pseudo)随机数生成及简单应用

C++伪(pseudo)随机数生成及简单应用

时间:2022-09-07 21:29:35

相关推荐

C++伪(pseudo)随机数生成及简单应用

两个主要函数两个简单应用

如果设定种子值,matlab:rng(),c++:srand(unsignd),则最终得到的随机数,无论是一个还是一个vector,都是固定的,可见有一种内部的机制(mechanism)保证了随机数的生成,该机制以rng或者srand的参数为参数,可见随机数并不真正“随机”,是为伪随机数。

两个主要函数

属于<cstdlib>标准库,该库又被包含在<iostream>中。

- int rand()

从srand(seed)中指定的seed开始,返回一个[seed, RAND_MAX(0x7fff))之间的随机整数(有某些均匀分布uniformed distribution的味道),注意是整数。整数相除如果不事先进行类型转换的话,得到的值仍为整数。所以如果想产生[0, 1)之间的伪随机数:

double randomVal = rand()/double(RAND_MAX);

void srand(unsigned seed)

seed是rand()的种子,也被用来初始化rand()的起始值(与实验不符,有待考证,如果这样成立的话,可实现随机数区间的一种截断)。如果希望rand()在每次程序运行时产生的数值不同,必须给传srand一个变直,这个变值可以手动确定,也可以当前经历的时间(elapsed time,time_t(0),返回从1970年1月1日00:00:00到目前为止所经历的时间)作为其值(需包含<ctime> 头文件)。

srand(unsigned(time_t(0)));

两个简单应用

获得0~10之间的随机整数(不包括10)

#include <cstdlib>#include <ctime>#include <stdio.h>int main(int, char**){srand(unsigned(time_t(0)));int rnd_vals[10];for (size_t i = 0; i < 10; ++i)rnd_vals[i] = rand() % 10;return 0;}

生成任意区间任意个数的服从均匀分布的数据,例10个五维的[-5, 5]之间的数据

#include <cstdlib>#include <ctime>#include <vector>#include <iostream>#include <iomanip>using namespace std;void print(const vector<vector<double> >& X){for (size_t i = 0; i < X.size(); ++i){for (size_t j = 0; j < X[i].size(); ++j)cout << setw(8) << X[i][j] << " ";cout << endl;}}int main(int, char**){int N = 10, d = 5;srand(unsigned(time_t(0)));vector<vector<double> > X;for (size_t i = 0; i < N; ++i){X.push_back(vector<double>());for (size_t j = 0; j < d; ++j)X.back().push_back(10 * rand() / double(RAND_MAX) - 5);}print(X);return 0;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。