rand函式生成的不是真正的隨機數嗎

2021-04-21 22:06:01 字數 3585 閱讀 2508

1樓:匿名使用者

這麼跟你說吧 rand函式生成的隨機數是根據乙個叫做 隨機種子 的東西生成的

當隨內機種子沒有變化時,容rand出來的數是不變的隨機種子他有乙個預設值 為了實現真正隨機我們就要改變它改變隨機種子的函式為 srand() 括號裡面帶乙個整數然後真正意義的隨機就要 srand( time( 0 ) )time這個函式好像是返回現在時間

因為每時每刻 時間 都在變化 都不一樣 所以隨機種子也絕對不會相同就實現了真正的隨機

rand()函式產生的隨機數為什麼是偽隨機數

2樓:匿名使用者

計算機的執行過程是乙個

確定的過程,每一條指令都是確定,因此從根本上來講,計算機產生不了真正意義上的隨機數。

那麼偽隨機數怎麼理解呢?舉個最簡單的例子,要隨機產生0~9十個數,那麼計算機可以迴圈快速的給出0、1、2、3、4、5、6、7、8、9、0、1……這樣的乙個數列,這個數列並不是隨機的,而是有規律的(所以才叫做偽隨機),當我們按下按鈕,或者點下滑鼠的瞬間,機器停止,並顯示最後的乙個數字(有點類似於玩***),這個過程我們挑選出來的數字好像是隨機的,但其實並不是100%隨機,只有我們去觸發機器的那個時間點是隨機的,其他都是有規律的,所以就是偽隨機。

rand()函式就是給出一列數值(這列數值是被事先打亂,但是是固定的數值),所以屬於偽隨機數。只是機器執行到rand()函式的時間點是隨機的,才讓我們感覺執行結果是隨機的一樣。

c語言中的rand()函式,說是產生隨機數的函式,可是為什麼我在使用時產生的隨機數就沒變過呢?

3樓:

rand() 使用的隨機數產生機制,稱為偽隨機數;

所以rand()也叫偽隨機數發生器。

必須初始化乙個真正的隨機一點的資料,得到的才像乙個真正的隨機數。

所以使用它之前,要呼叫srand 函式初始化一下。

一般大家都喜歡用,系統當前時間來初始化它

#include

srand(time(null));/*或者

.....

a[i]=rand() / rand_max * n;

/* 或者 a[i]=(double)rand() /( rand_max +1)* n; */

....

4樓:匿名使用者

隨機數函式是不真正的隨機數,所以每次執行會有相同的結果,這個現象要用srand函式來解決,用srand函式初始化隨機數生成器,可以避免生成相同的隨機數

一般用電腦的時間來進行初始化

srand((unsigned) time(null));

5樓:龍__鳳

在程式前面加上srand(time(null));,保證隨機種子在每次執行程式時都不一樣,rand()得到的數就不一樣了

6樓:何處可人生

你需要加乙個種子,就是在用rand()之前加上srand(time(null))就好了;這樣要用到頭檔案time.h;根據執行的系統時間不同了計算隨機數,但其實這個函式並不是真隨機,是偽隨機,

7樓:旋風男孩兒

這是因為在使用rand()隨機函式時之前要獲取隨機種子srand((unsigned)time(null));

8樓:匿名使用者

我記得rand()是需要引數的,不同引數導致不同的序列,比如用當前時間作為引數就是乙個不錯的選擇。

如何用rand函式產生乙個隨機數?

9樓:匿名使用者

如果需要在數值a-b之間隨即產生乙個數,如下操作:

單元格中輸入函式

=round(rand()*(c+a),3) 函式解釋:在a-b區間範圍內隨即產生乙個數,小數點後保留3位!

其中的=rand()*(c+a) 函式解釋:以a為起點,步長為c 在a-b中隨即產生乙個數。

備註: c 為步長,也就是所取點的範圍長度。在這裡應該是c=b-a=round(#,3) 函式解釋:數值#小數點後取3位.

10樓:匿名使用者

rand()函式是產生隨機數的乙個隨機函式。

注意:(1)使用該函式首先應在開頭包含標頭檔案stdlib.h

#include(c++建議使用#include,下同)

(2)在標準的c庫中函式rand()可以生成0~rand_max之間的乙個隨機數,其中rand_max 是stdlib.h 中定義的乙個整數,它與系統有關。

(3)rand()函式沒有輸入引數,直接通過表示式rand()來引用;例如可以用下面的語句來列印兩個隨機數:

printf("random numbers are: %i %i\n",rand(),rand());

(4)因為rand()函式是按指定的順序來產生整數,因此每次執行上面的語句都列印相同的兩個值,所以說c語言的隨機並不是真正意義上的隨機,有時候也叫偽隨機數。

(5)為了使程式在每次執行時都能生成乙個新序列的隨機值,我們通常通過為隨機數生成器提供一粒新的隨機種子。函式 srand()(來自stdlib.h)可以為隨機數生成器播散種子。

只要種子不同rand()函式就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器。

例項:#include

#include

int main()

return 0;}

rand()隨機函式是什麼原理 10

rand()隨機函式產生的值的範圍?

11樓:好嘞啊啊啊啊

看返回值的型別

unsigned int

雙位元組是65535,

四位元組是4294967295的整數範圍。

rand()函式是乙個有返回值的函式

rand()%32 是0-31

如果加一的話

就是1-32

用=rand()命令在excel中生成一系列隨機數之後為什麼數值會不斷變化?怎麼才能讓其數值不變化?

12樓:小丁創業

用=rand()命令在excel中生成一

來系列源隨機數之後數值bai會不斷變化,是du因為函式都會在改變乙個單元zhi格之後重算。

dao解決的方法和詳細的操作步驟如下:

1、第一步,開啟要處理的文件,如下圖所示,然後進入下一步。

2、其次,完成上述步驟後,選擇不存在由rand函式生成的隨機數的單元格,並按鍵盤上的「ctrl + c」進行複製,如下圖所示,然後進入下一步。

3、接著,完成上述步驟後,單擊滑鼠右鍵,然後在貼上選項中選擇「數值」選項,如下圖所示,然後進入下一步。

4、最後,完成上述步驟後,返回到excel表,發現rand函式生成的隨機數不再通過f9或重新開啟表而改變,如下圖所示。這樣,問題就解決了。

13樓:匿名使用者

要麼將選擇性貼上數值到其它單元格,要麼到「工具」——〉「選項」——〉「重新計算」中把自動運算取消,這時,只要你不編輯公式單元格,結果就一直不變,

利用rand函式產生100以內的隨機數,然後用氣泡排序法對這數進行降序排

1 輸入 2 排序抄 3 輸出。參考 如下 include int main for i 0 i 10 i 輸出 利用隨機函式產生10個100以內的整數,並從小到大的順序排序並輸出。include using namespace std int a 10 測試陣列 duvoid print 輸出陣列...

這個生成鍊錶的函式有什麼問題,這個生成鍊錶的函式有什麼問題

p1 struct student malloc len p2 struct student malloc len 開闢乙個新單元 這裡改成下面的 p2 p1 struct student malloc len 使p1p2同指向第乙個節點 這樣下面的那些構造鍊錶的時候的指標才能對應,才能順利構造鍊錶...

利用隨即函式rnd()生成在1 100之間的各不相同的

vb裡面有多個隨機函式?語法rnd number 可選的number 引數是single 或任何有效的數值表示式。返回值如果 number 的值是rnd 生成小於 0每次都使用 number 作為隨機數種子得到的相同結果。大於0 序列中的下乙個隨機數。等於0 最近生成的數。省略序列中的下乙個隨機數。...