1. 程式人生 > >採用rand生成隨機數方法

採用rand生成隨機數方法

我們知道rand()函式可以用來產生隨機數,但是這不是真正意義上的隨機數,是一個偽隨機數,是根據一個數(我們可以稱它為種子)為基準以某個遞推公式推算出來的一系列數,當這系列數很大的時候,就符合正態公佈,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種子的值是定了的,除非你破壞了系統。

1.rand()

功能:隨機數發生器

用法:int rand(void)

所在標頭檔案: stdlib.h

rand()的內部實現是用線性同餘法做的,它不是真的隨機數,因其週期特別長,故在一定的範圍裡可看成是隨機的。

rand()返回一隨機數值的範圍在0至RAND_MAX 間。RAND_MAX的範圍最少是在32767之間(int)。用unsigned int 雙位元組是65535,四位元組是4294967295的整數範圍。0~RAND_MAX每個數字被選中的機率是相同的。

使用者未設定隨機數種子時,系統預設的隨機數種子為1。

rand()產生的是偽隨機數字,每次執行時是相同的;若要不同,用函式srand()初始化它。

2.srand()

功能:初始化隨機數發生器

用法: void srand(unsigned int seed)

所在標頭檔案: stdlib.h

srand()用來設定rand()產生隨機數時的隨機數種子。引數seed必須是個整數,如果每次seed都設相同值,rand()所產生的隨機數值每次就會一樣。

3.使用當前時鐘作為隨機數種子

rand()產生的隨機數在每次執行的時候都是與上一次相同的。若要不同,用函式srand()初始化它。可以利用srand((unsigned int)(time(NULL))的方法,產生不同的隨機數種子,因為每一次執行程式的時間是不同的。

#include <iostream>
#include <iomanip>
#include <time.h>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	//設定種子,不然rand()是個偽隨機數
	srand(time(NULL));

	//生成指定範圍內的隨機數
	//[a,b],(rand() % (b-a+1)) + a
	//[a,b),(rand() % (b-a)) + a
	//(a,b)
	//(a,b],(rand() % (b-a)) + a + 1

	int nStart = 10;
	int nEnd = 100;
	for ( int i = 0; i < 20; i++ )
	{
		cout << nStart + (int)(nEnd - nStart) * rand() / (RAND_MAX + 1) << endl;
	}

	//生成0~1之間的浮點數,保留小數點後兩位
	for ( int i = 0; i < 20; i++ )
	{
		cout << setprecision(2) << rand() /double(RAND_MAX) << endl;
	}

	return 0;
}


相關推薦

採用rand生成隨機數方法

我們知道rand()函式可以用來產生隨機數,但是這不是真正意義上的隨機數,是一個偽隨機數,是根據一個數(我們可以稱它為種子)為基準以某個遞推公式推算出來的一系列數,當這系列數很大的時候,就符合正態公佈,從而相當於產生了隨機數,但這不是真正的隨機數,當計算機正常開機後,這個種

SecretKeyCreateUtil工具類,採用安全的生成隨機數方法(SecureRandom),此處為10位

public class SecretKeyCreateUtil {/** * 產生金鑰資訊 * 採用安全的生成隨機數方法(SecureRandom) * @throws IOException * @throws NoSuchAlgorithmException  */pu

python生成隨機數方法小結

random.randrange(a, b, step):在指定的集合[a,b)中,以step為基數隨機取一個數.如random.randrange(0, 20, 2),相當於從[0,2,4,6,...,18]中隨機取一個.例: (adsbygoogle = window.ads

srand()和rand()生成隨機數

#include <iostream> #include <time.h> using namespace std; void main() { //srand(1);

MATLAB中生成隨機數方法總結

好久沒用MATLAB了,今天在利用MATLAB進行資料處理時,突然發現自己忘記了該如何產生自己需要的隨機數形式,於是又查了一通資料。現對其進行一個簡單的總結,供自己和大家以後參考: 1. randi

C#(.Net)平臺下生成隨機數方法的小結

最近在做一些工作,需要用到一些隨機數來確保生出出來的串號唯一。 開始,很簡單地使用System.Random類來生成隨機數。很快,問題就來了,發現當random的生成間隔小於1ms時,隨機數就重複了(僅限於每次都新建Random物件),因為新建random時候是預設以當前時

【JavaSE基礎】生成隨機數的三種方法

new random nbsp 最小 最小值 () 通過 java -s 方法一:   (數據類型)(最小值+Math.random()*(最大值-最小值+1)) 舉例:    (int)(1+Math.random()*(10-1+1))  生成1~10的隨機數。 方法

C++生成隨機數方法總結

oca cnblogs nbsp seconds wmi iostream 代碼 cin std 網上有很多使用C++生成隨機數的文章,其原理不再贅述,這裏貼出windows系統上生成各種隨機數的代碼,方便查用。 1 #include <iostream>

PHP生成隨機數的幾種方法

rand dst ret fun ech end tran spa bstr 第一種方法用mt_rand() function GetRandStr($length){ $str=‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP

python 生成隨機數的兩種方法

1. 使用 random 包生成隨機數 可以生成 均勻分佈, 高斯分佈,(包括正態分佈) 指數分佈,(與泊松分佈有區別:泊松分佈表示一段時間發生多少次,而指數分佈表示兩次發生的時間間隔) 貝塔分佈, 韋布爾分佈的隨機數 由此可見,random 包支援的隨機分佈比較有限,功能較少.

關於使用jmeter函式助手生成隨機數的使用方法

記錄自己的生活!   1、使用jmeter函式助手的生成隨機數的方法,主要包含以下幾個函式:     【_Random】     【_RandomString】   2、關於【_

matlab生成隨機數rand、randi和randn三種形式

matlab中關於隨機數的產生有3種庫函式,下面我們來看看它們的形式:   1、rand(…)    它是生成0~1之間(開環,不包含0和1兩個數)均勻分佈的偽隨機數,也就是無窮次試驗其中每個數產生的概率是一樣的。    它的函式格式如下: <span sty

java——自己寫一個生成隨機數方法

在java中,主要有三種獲得隨機數的方法: 1、Math.random();這個方法生成的是0~1之間的一個double; 2、java.util的Random類,建立該類的物件來產生隨機數(int、float、double、long) 3、System類中的currentTimeMilli

SecureRandom生成隨機數超慢i及其解決方法

原文如下:https://blog.csdn.net/upshi/article/details/54907464 有2種解決方案: 方法1:在Tomcat環境中:     可以通過配置JRE使用非阻塞的 Entropy Source:   在ca

生成隨機數的兩種方法

方法一、Math類有個random方法可以實現隨機數的生成。Math.random()返回的是:返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。在此基礎上我們修改下就能得到一定範圍的隨機數: (int)(Math.random()*10)

用python生成隨機數的幾種方法

  今天學習了用python生成模擬資料的一些基本方法和技巧,寫成部落格和大家分享一下。      本篇部落格主要講解如何從給定引數的的正態分佈/均勻分佈中生成隨機數以及如何以給定概率從數字列表抽取某數

利用Math.Random()方法生成隨機數。(轉)

 在Java語言中生成隨 機數相對來說比較簡單,因為有一個現成的方法可以使用。在Math類中,Java語言提供了一個叫做random的方法。通過這個方法可以讓系統產生隨機 數。不過預設情況下,其產生的隨機數範圍比較小,為大於等於0到小於1的double型隨機數。雖然其隨機數產生的範圍比較小,不能夠滿足日常的需

C語言 rand函式生成隨機數

在實際的專案中,有時候需要生成一個隨機數,在C語言中隨機數的生成可以通過使用rand函式來實現。 rand函式包含在標頭檔案stdlib.h裡,因此使用rand函式需要宣告包含stdlib.h。 #include<stdlib.h> #inc

C語言和java中生成隨機數的原理和方法

C語言 一.函式 1:int rand(void) 該函式會產生一個[0,RAND_MAX]的偽隨機數,那什麼是偽隨機數? 相當於一個序列a1-an,第一次使用會返回a1, 第二次使用會返回a2….第n次返回an,這樣每次呼叫rand()都能產生一個不同

Qt生成隨機數方法

1.生成隨機數 生成隨機數主要用到了函式qsrand和qrand,這兩個函式在#include <QtGlobal>中,qsrand用來設定一個種子,該種子為qrand生成隨機數的起始值。比