rand
出自cppreference.com
在標頭 <stdlib.h> 定義
|
||
int rand(); |
||
返回 0 與 RAND_MAX 間的隨機整數值(包含 0 與 RAND_MAX
)。
srand() 播種 rand()
所用的偽隨機數生成器。若在任何對 srand()
的調用前使用 rand()
,則 rand()
表現如同它以 srand(1)
播種。每次以 srand()
播種 rand()
時,它必須產生相同的值數列。
不保證 rand()
為線程安全。
目錄 |
[編輯] 參數
(無)
[編輯] 返回值
0 與 RAND_MAX 間包含邊界的隨機整數值。
[編輯] 注意
無對產生的隨機數質量的保證。過去,某些 rand()
的實現在隨機性、分布和產生的數列周期中有嚴重缺陷(在一個廣為人知的例子中,最低位在調用間簡單地於 1
和 0
間改變)。不推薦將 rand()
用於嚴肅的隨機數生成需求,如加密。
POSIX 要求 rand
所用的偽隨機數生成器的周期至少為 232
。
POSIX 提供 rand 的線程安全版本,名為 rand_r
,它由於 drand48
函數族而過時。
[編輯] 示例
運行此代碼
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); // 以当前时间为随机生成器的种子 int random_variable = rand(); printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable); // 扔 6 面色子 20 次 for (int n = 0; n != 20; ++n) { int x = 7; while(x > 6) x = 1 + rand() / ((RAND_MAX + 1u) / 6); // 注意: 1 + rand() % 6 有偏差! printf("%d ", x); } }
可能的輸出:
Random value on [0,2147483647]: 448749574 3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1
[編輯] 引用
- C17 標準(ISO/IEC 9899:2018):
- 7.22.2.1 The rand function (第 252 頁)
- C11 標準(ISO/IEC 9899:2011):
- 7.22.2.1 The rand function (第 346 頁)
- C99 標準(ISO/IEC 9899:1999):
- 7.20.2.1 The rand function (第 312 頁)
- C89/C90 標準(ISO/IEC 9899:1990):
- 4.10.2.1 The rand function
[編輯] 參閱
播種偽隨機數生成器 (函數) | |
rand() 生成的最大可能值 (宏常量) | |
rand 的 C++ 文檔
|