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)); // use current time as seed for random generator int random_variable = rand(); printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable); // roll a 6-sided die 20 times for (int n=0; n != 20; ++n) { int x = 7; while(x > 6) x = 1 + rand()/((RAND_MAX + 1u)/6); // Note: 1+rand()%6 is biased 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 rand 函式 (p: 252)
- C11 標準 (ISO/IEC 9899:2011)
- 7.22.2.1 rand 函式 (p: 346)
- C99 標準 (ISO/IEC 9899:1999)
- 7.20.2.1 rand 函式 (p: 312)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 4.10.2.1 rand 函式
[編輯] 另請參閱
| 為偽隨機數生成器播種 (函式) | |
| 由 rand() 生成的最大可能值 (宏常量) | |
| C++ 文件 關於 rand
| |