srand 初始隨機數發生器
rand 隨機數發生器
注意在c++中,當srand中的引數相同(即隨機數種子相同)時,則產生的偽隨機數列也相同
關係:
srand函式用於為rand函式產生隨機數種子
使用:
通常用time(null)作為srand函式的傳入引數;
當使用time(null)作為srand函式的傳入引數時,rand函式則以時間作為隨機數種子進而產生隨機數
技巧 1:
若要產生指定範圍內的隨機整數例如 [a, b) 則可以使用: a + rand() % (b - a) 表示式,也即為要產生 [a, b)範圍內的隨機整數,可以使用 a + rand() % n 表示式,其中 a 為起始值, n 為隨機整數取值範圍的大小即為 b - a
技巧 1 解釋:
使用 rand() % n 產生的是 [0, n)之間的隨機整數,則在此基礎上進行改進,加上乙個起始值 a 則產生隨機整數的範圍變為 [a, n + a),那麼要產生[a, b)內的隨機整數,則只需要將n變為 b - a
技巧 2 :
如要產生隨機小數,直接將產生的隨機整數除以相應次數的10,例:若產生3位的隨機小數,則先產生隨機整數,然後除以1000即可
細節分析:
計算機執行效率對隨機數產生的影響:
**一:
#include
#include
#include
using
namespace
std;
int main()
return
0;}
上面**執行效果:只用時間初始化隨機數種子一次,從而隨機產生100個不同的數字
**二:
#include
#include
#include
using
namespace
std;
int main()
return
0;}
上面**執行效果:每次用時間初始化隨機數種子,但是產生的這100個數字是相同的
分析:由於現在的計算機執行效率非常高,使得for迴圈(迴圈次數非常少時)中的時間保持不變(即for迴圈中的time(null)不變),所以**二的方式在for迴圈裡使用srand函式指定隨機數種子,則每次迴圈隨機數種子都相同(因time(null)都相同)來初始化偽隨機數列,則每次的偽隨機數列都相同,同時rand都只產生偽隨機數列中的第乙個數字,那麼每次由rand產生的數字都相同,而用**一則只初始化一次隨機數種子,則之後rand函式每次產生的數字都從偽隨機數列中依次產生,從而能夠產生不同的數字。
C 隨機函式應用
c 中的標準庫 包含在中 提供兩個幫助生成偽隨機數的函式 rand 和srand 函式一 int rand void 從srand seed 中指定seed開始,返回乙個範圍介於 seed,rand max 0x7fff 的隨機整數 函式二 void srand unsigned seed 引數se...
QT 的隨機函式的應用
首先是初始化 qsrand qtime 0,0,0 secsto qtime currenttime 接著就可以隨機了 qrand 理論上返回0 到rand max間的值。如果要返回0 n間的值,則為 qrand n 如果要返回a b間的值,則為 a qrand b a 這裡介紹2種方法 標頭檔案都...
SQL Server中隨機函式的應用
select from student order by newid select top n from student order by newid 這裡的n代表隨機顯示的記錄數 注 newid 返回的是uniqueidentifier型別的唯一值。newid 每次產生的值都不一樣,那麼根據這樣的...