自己做隨機函式,如何產生真正的隨機函式?

2022-10-31 19:00:13 字數 3780 閱讀 6071

1樓:匿名使用者

在計算機中並沒有一個真正的隨機數發生器,但是可以做到使產生的數字重複率很低,這樣看起來好象是真正的隨機數,實現這一功能的程式叫偽隨機數發生器。

有關如何產生隨機數的理論有許多,如果要詳細地討論,需要厚厚的一本書的篇幅。不管用什麼方法實現隨機數發生器,都必須給它提供一個名為「種子」的初始值。而且這個值最好是隨機的,或者至少這個值是偽隨機的。

「種子」的值通常是用快速計數暫存器或移位暫存器來生成的。

下面講一講在c語言裡所提供的隨機數發生器的用法。現在的c編譯器都提供了一個基於ansi標準的偽隨機數發生器函式,用來生成隨機數。它們就是rand()和srand()函式。

這二個函式的工作過程如下:

1) 首先給srand()提供一個種子,它是一個unsigned int型別,其取值範圍從0~65535;

2) 然後呼叫rand(),它會根據提供給srand()的種子值返回一個隨機數(在0到32767之間)

3) 根據需要多次呼叫rand(),從而不間斷地得到新的隨機數;

4) 無論什麼時候,都可以給srand()提供一個新的種子,從而進一步「隨機化」rand()的輸出結果。

這個過程看起來很簡單,問題是如果你每次呼叫srand()時都提供相同的種子值,那麼,你將會得到相同的隨機數序列,這時看到的現象是沒有隨機數,而每一次的數都是一樣的了。例如,在以17為種子值呼叫srand()之後,在首次呼叫rand()時,得到隨機數94。在第二次和第三次呼叫rand()時將分別得到26602和30017,這些數看上去是很隨機的(儘管這只是一個很小的資料點集合),但是,在你再次以17為種子值呼叫srand()後,在對於rand()的前三次呼叫中,所得的返回值仍然是在對94,26602,30017,並且此後得到的返回值仍然是在對rand()的第一批呼叫中所得到的其餘的返回值。

因此只有再次給srand()提供一個隨機的種子值,才能再次得到一個隨機數。

怎麼做excel的隨機函式啊?

2樓:匿名使用者

rand

返回大於等於 0 及小於 1 的均勻分佈隨機數,每次計算工作表時都將返回一個新的數值。

語法rand( )

說明若要生成 a 與 b 之間的隨機實數,請使用:

rand()*(b-a)+a

如果要使用函式 rand 生成一隨機數,並且使之不隨單元格計算而改變,可以在編輯欄中輸入「=rand()」,保持編輯狀態,然後按 f9,將公式永久性地改為隨機數。

例 如=rand() 介於 0 到 1 之間的一個隨機數(變數)

=rand()*100 大於等於 0 但小於 100 的一個隨機數(變數)

再如生成1至5之間的隨機數

=rand()*4+1

注:該函式得出的值是可以更新的(也就是每點一次單元格或按下f9功能鍵,數字是會在區間變動的)

在excel**裡做成隨機資料在+—20範圍內,我用=int(rand())*40-20函式在自己的電腦上不能生成資料

3樓:匿名使用者

rand() 生成零至一的數,int後變成零,乘40,是零,減20,變-20。每次一樣。

=int(rand()*40)-20

4樓:匿名使用者

是因為你的excel選項中的「公式」計算選項,被勾選了「手動重算」。

解決方法:勾選「自動重算」,「確定」退出。

5樓:孟陸奕鋮的老子

=round(rand()*40)-20 這樣應該可以了

對了,每次要雙擊進入單元格,然後敲回車鍵,這樣才有效

6樓:匿名使用者

因為智商❤許多不需要解釋的事情 在你開口的那一瞬間 你就輸了

如何產生真正的隨機函式?

7樓:柾物鼕

---- 在vb中的隨機函式是rnd,但在使用的過程中發現,雖然程式啟動後產生的數值是隨機的,但對於每次重新啟動,程式都會產生相同的隨機數序列,應該怎樣解決?----vb中隨機函式的原形是: rnd(number),rnd函式返回小於1但大於或等於0的值。

number (可選項)的值決定了rnd生成隨機數的方式。由於生成隨機數方式的確定,導致了每次新啟動隨機函式,最初給定的種子都會生成相同的數列,因為每一次呼叫rnd函式都用數列中的前一個數作為下一個數的種子。----為了每次執行程式呼叫隨機函式都會有不同的隨機數序列,在呼叫rnd之前,先使用無引數的randomize語句初始化隨機數生成器,該生成器具有根據系統計時器得到的種子,這樣再呼叫rnd就會得到不同的隨機數序列了。

關於excel隨機函式 20

8樓:千秋遐想

3全部excel隨機數函式

9樓:匿名使用者

可以用連結**的方式

先做一個每個菜品對應**的表,然後把這樣表根據每個菜品名進行定義名稱(比如a列放菜名,b列對應單元格放對應的**,然後選中ab列中有菜名和**的部分,點選「公式」-->根據所選內容建立

=indirect(a1)

這裡的a1是你這張**對應的那個菜名的單元格=名稱1

然後就可以了,就是建立**對應關係的時候比較麻煩,要每個選單每個位置都放一張**

密碼: xcpq

10樓:劍名箕湛芳

具體的來說,比如你要做一組10個數,都是在50左右的,總和等於500,可以讓前9個數=round(25+50*rand(),0)

第十個數=500-前9個數的和。第十個數的做用是補平前9個數。

請教隨機函式原理rand

11樓:匿名使用者

rand 是一個偽隨來

機函式。

你可以使用源srand,它需要一個種bai子,根據du這個種子來提供隨機數。

原型zhi:void srand(unsigned seed);

用法:它dao需要提供一個種子,這個種子會對應一個隨機數,如果使用相同的種子後面的rand()函式會出現一樣的隨機數。如:

srand(1); 直接使用1來初始化種子。不過為了防止隨機數每次重複常常使用系統時間來初始化,即使用 time函式來獲得系統時間,它的返回值為從 00:00:

00 gmt, january 1, 1970 到現在所持續的秒數,然後將time_t型資料轉化為(unsigned)型再傳給srand函式,即還有一個經常用法,不需要定義time_t型t變數,即: srand((unsigned) time(null)); 直接傳入一個空指標,因為你的程式中往往並不需要經過引數獲得的t資料。

srand((int)getpid()); 使用程式的id(getpid())來作為初始化種子,在同一個程式中這個種子是固定的。

12樓:匿名使用者

不同的庫時rand可能不太一樣,隨機出來的數基本符合平均分佈

怎麼做matlab隨機函式,

13樓:匿名使用者

round(7*rand(1,10))+21可以一下子生成10個21到28的數。

我的執行結果如下:

25 26 21 22 27 26 25 26 28 25

14樓:匿名使用者

21+round(rand(1))*7 就可以了,

rand(1)-產生0~1的隨機數。

flash如何產生隨機函式

random 6 不知道是什麼意思,有這樣的寫法嗎?這樣就可以了,生成範圍在1000之內。你沒定義種子。這種隨機是稱為偽隨機,就是說先要生成種子才能有隨機數。聽說現在已經有了真正意義上的隨機了。期待中。flash產生隨機數的 flash隨機函式。txt1 100,100,200,20 var num...

如何用rand函式產生隨機數,如何用rand函式產生一個隨機數

rand 函式是產生隨機數的一個隨機函式。注意 1 使用該函式首先應在開頭包含標頭檔案stdlib.h include c 建議使用 include,下同 2 在標準的c庫中函式rand 可以生成0 rand max之間的一個隨機數,其中rand max 是stdlib.h 中定義的一個整數,它與系...

rand隨機函式產生的值的範圍rand是如何確定要產生的隨機數的範圍的?例如rand20它產生的隨機數的範圍?

cplusplus中有這樣的介紹 rand函式產生一個0到rand max的偽隨機數,這裡的rand max因不同的實現而異,但rand max至少為32767。比如,msvc中通常為0x7fff,即32767,而linux平臺下gcc中rand max通常會遠遠大於這個值 有一些其他程式語言的ra...