隨機發生數種子是什麼?
隨機種子數是什麼意思
使用隨機數之前一般要種一個種子,一般是用系統時間產生一個種子,你可以試憨下,如果每次的種子都是一樣的,那麼產生的隨機數的順序也是一樣的
什麼叫隨機數種子
一般計算機的隨機數都是偽隨機數,以一個真隨機數(種子)作為初始條件,然後用一定的算法不停迭代產生隨機數。
2一般種子可以以當前的系統時間,這是完全隨機的
算法1:平方取中法。
1)將種子設為X0,並mod 10000得到4位數
2)將它平方得到一個8位數(不足8位時前面補0)3)取中間的4位數可得到下一個4位隨機數X1
4)重複1-3步,即可產生多個隨機數
這個算法的一個主要缺點是最終它會退化成0,不能繼續產生隨機數。
詳見百度百科:baike.baidu.com/...Zo2Yp-
生成隨機數的種子 5分
你設置的隨機數可能存在邏輯性錯誤,或者就是你取隨機數變量或者間隔時間的問題。
用當前機器時間作隨機種子是什麼意思啊
就是用當前時間為基準,來產生隨機數,如果程序用固定的數產生隨機數,結果也是固定的,用時間產生,隨時間不同,產生的數字也不同。
為什麼用了隨機種子,產生的隨機數是一樣的
srand函數每個程序只需調用一次,而不需要調用多次。要理解srand函數和rand函數的本質。
把srand放在循環體外面,否則,因為程序執行的很快,時間函數得到的值一樣,種子就一樣,所以,rand的結果也一樣了。
參考如下:
srand((unsigned int)time(NULL));
for (i=0; i
{
......
x1 = rand() % 500
....
}
隨機數種子是做什麼的?
隨機函數產生範是一種偽隨機數,它實際是一種序列發生器,有固定的算法,只有當種子不同時,序列才不同,所以不應該把種子固定在程序中,應該用隨機產生的數做種子,如程序運行時的時間等。
以c++為例,應先用srand()設置不同種子,否則每次調用rand()得到的值是一樣的。
為什麼種子一樣,用rand()產生的隨機數就會一樣
其實rand()的原理是這樣的。
先設置一個種子,srand(seed),如果你沒有設置,程序會自動設置,有可能是一個固定的值,也可能是系統時間。具體看是什麼語言。
當第一次計算rand的時候,它用seed的值帶入一個公式產生一個值,並將這個值或者這個值的一部分返回給你。再次調用,在公式中帶入上次產生的值。這樣反覆迭代,就是一個序列。所以,如果種子是相同的,那麼你得到的隨機數是什麼取決於你第幾次調用rand()。
下面是vc的實現方法,如果能看懂就很容易明白了。
void srand(unsigned int seed)
{
holdrand = (long)seed;
}
int rand()
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}
什麼是隨機數及隨機數種子,能不能詳細通俗介紹一下?
隨機數在科學研究與工程實際中有著極其重要的應用!
簡單來說,隨機數就是一個數列,這個數列可能滿足一定的概率分佈,也許其滿足的分佈並不為我們所知。
不知道你是否知道一個經典的例子:“使用一根針和兩條線求圓周率”(如果不知到你可以搜一下)。這個實驗我們可以使用數學模擬(蒙特卡羅模擬)的方法來進行,這樣可以最大限度的節約實驗所消耗的時憨(使用計算機),也在一定程度上剔除了人為因素的影響。但有一個前提必須考慮,就是模擬的隨機性要好。怎樣體現呢,這時就需要使用“好”的隨機數來替代我們的物理實驗。
據我所知,隨機數在科學預測上有著非常重要的應用!還有密碼學中,隨機數也是基礎之一。
數學方法產生隨機數應該稱之為“偽隨機數”,只有使用物理方法才能得到真正的隨機數!
為了得到數學上的偽隨機數,我們就要研究“為隨機數發生器”!
通常,0-1區間上的均勻隨機數是基礎的基礎,因此,大量的工作是圍繞它展開的!在此基礎之上,又可以得到符合正態分佈,beta分佈等的偽隨機數。
“種子”是什麼呢?
經典的偽隨機數發生器是這樣的:
X(n+1)= a * X(n) + b
顯然通過上式我們能夠得到一個數列,前提是X(0)應該給出,依次我們就可以算出X(1),X(2)...;當然不同的X(0)就會得到不同的數列。
可以說:“X(0)”就是種子。
對於一個應用級的偽隨機數發生器,所有的“偽隨機數”,均勻的分佈於一個“軌道”上,幾乎所有的數都可以做為種子。數字“0”,有時是一個特例,不能作為種子,當然它取決於你使用的隨機數發生器!
呵呵,樓上說的言簡意賅,但那個函數並不複雜,你可以搜一下“素數模偽隨機數發生器”
X(n+1)= a * X(n),
只不過這個a的確定不是太簡單,要求隨機性好(期望0.5,標準差1/12);週期長!
當然還有更好的發生器,週期可達2^6xxxx - 1(具體的忘了)!
什麼是vb的隨機數和種子??
是的,用隨機數的時候要用到randomize(觸這個函數來避免每次生成的數都是一樣的,在vb.net中是直接寫成randomize()的,不用寫number
你下面寫的意思是:
(b-a)*rnd()+a 是a到b區間的數,但是不包含a,b本身;
int((b-a+1)*rnd()+a 是a到b區間的數,但是包含a,b本身的數所以要加上1
一般可以自己寫出生成隨機數的函數來的,就是用線性同餘法來生成隨機數,所以開始定義的一個數來生成的時候,第一個數就叫做種子數了,用它來生成一串隨機數。
隨機種子
偽隨機數是以一個稱為“種子”的數作為初始條件,通過固定的算法產生一個看上去像是隨機產生的數字序列的。
舉例來說,這個算法可以設計成類似於“將給定的種子開平方,取有效數字的第2至9位作為下一次迭代的種子,重複此過程3次後,以結果的第1-4位作為返回值、並將該結果作為下次調用本過程的種子”等等。
然而,無論這個算法如何複雜,只要它固定不變,則對於相同的種子來說,每一次從這個種子開始、第n次通過該算法取得的偽隨機數亥總是一樣的,因此必須再通過各種真正客觀的途徑使得該初始的種子不同。一般來說常用的方式是以運行時候的時鐘時間,經一定變化後作為初始的種子的。