文章插圖

文章插圖
Matlab內置了五種隨機函數:
rand:生成在(0, 1)之間均勻分布的隨機數randn:生成均值為0,方差為1的標準正態分布的隨機數randi(imax):生成在[1, imax] 均勻分布的偽隨機整數randsrc(m, n, [alphabet; prob]):生成一個m-by-n的矩陣,矩陣的元素從alphabet里抽取,alphabet每個元素被抽中的概率由prob指定 。randperm(n):生成一個1到n的隨機順序 。
【c語言 生成隨機數 生成隨機數c#】而C++中要生成隨機數,通常需要使用rand()和srand()兩個函數 。
對于C++ 11之前的隨機數生成,只需rand/srand這兩函數即可,C++11之后提供了更多的選擇和東西,這里暫且不表 。1、rand函數
int rand(void);rand()函數返回一個 0 ~ RAND_MAX 之間的整數 。RAND_MAX 是一個定義在 <cstdlib> 的常數 。該函數返回的數字實際上是用算法生成的,實際上并不是隨機的 。它是根據種子生成的,根據不同的種子產生不同的隨機序列 。系統默認的種子是1,所以說每次使用的隨機序列都是固定的 。
比如下面這段代碼:
#include <iostream>using namespace std;int main(){cout << "RAND_MAD: " << RAND_MAX << endl;int x = rand();cout << "x: " << x << endl;return 0;}運行結果如下圖所示,可以看出,每次運行的結果,x 的值都是固定的 。要想使每次運行時變量 x 的值都不同,就必須使它的種子隨機,這時就需要用到srand函數 。
void srand(unsigned int seed);srand()函數就是用來設置rand()函數的種子的 。根據不同的輸入參數可以產生不同的種子 。通常使用time函數作為srand函數的輸入參數 。time(NULL);time函數會返回1970年1月1日至今所經歷的時間(以秒為單位) 。在使用 rand() 函數之前,srand() 函數要先被調用,并且在整個程序中只需被調用一次 。代碼如下:
#include <iostream>using namespace std;int main(){srand(time(0));int x = rand();cout << "x: " << x << endl;return 0;}運行結果如下:在實際應用中,通常需要要將隨機數的范圍限制在 1 到某個值 max 之間,則可以使用以下公式:
int var = rand() % max + 1;求余數運算符(%)可以獲得整除之后的余數 。如當 max 為 6 時,余數將是 0 ? 5,給余數加 1 即可轉換為 1 ~ 6 。#include <iostream>using namespace std;int main(){srand(time(0));int x = rand() % 6 + 1;cout << "x: " << x << endl;return 0;}運行結果如下:常見的隨機數算法有線性同余法(Linear Congruential Generator)、梅森旋轉法(Mersenne twister)等 。
- 二維碼生成器哪個軟件好 最好的二維碼生成軟件
- c語言歸并排序最簡代碼 歸并排序c語言
- 英文套路情話大全,換種語言一樣套牢她
- string類的常用方法有哪些 string類的常用方法c語言
- c++楊輝三角代碼 楊輝三角C語言程序
- swift編程有什么用 swift語言現在怎么樣了
- 最尋常的撩小哥哥語言,平平淡淡和你一起慢慢變老
- c語言開發的軟件有哪些 C語言開發用什么軟件
- c語言e計數法規則 c語言科學計數法e和E區別
- 隨機數生成c++,出現不重復的數 c++生成不重復的隨機整數
