在C中提供了rand()、srand()、random()、arc4random()幾個函數來獲取隨機數。
使用 arc4random 生成隨機數:
1.1 獲取一個隨機整數范圍在:[0,100)包括0,不包括100:
int number = arc4random() % 100;
1.2 獲取一個隨機數范圍在:[100,200],包括100,包括200:
int number = arc4random() % 101 + 100;
1.3根據取值范圍獲取隨機數的方法:
獲取一個隨機整數,范圍在[from,to],包括from也包括to
-(int)getRandomNumber:(int)from to:(int)to
{
? ? ? ?return (int)((arc4random() % (to – from + 1)) + from);
}
使用 rand() 生成隨機數:
注意:
在標準的C庫中函數rand()可以生成0~RAND_MAX之間的一個隨機數,其中RAND_MAX 是stdlib.h 中定義的一個整數,它與系統位數有關。
rand()函數沒有輸入參數,直接通過表達式rand()來引用;
printf("Random numbers are: %i %i\n",rand(),rand());
偽隨機數:
因為rand()函數是按指定的順序來產生整數,因此每次執行上面的語句都打印相同的兩個值,所以說C語言的隨機并不是真正意義上的隨機,有時候也叫偽隨機數。
為了使程序在每次執行時都能生成一個新序列的隨機值,我們通常通過為隨機數生成器提供一粒新的隨機種子。函數 srand()(來自stdlib.h)可以為隨機數生成器播散種子。只要種子不同rand()函數就會產生不同的隨機數序列。srand()稱為隨機數生成器的初始化器。用rand()隨機生成在[x,y]內的整數
/*k即為所求范圍內隨機生成的數,rand()%a的結果最大為a-1*/
int k= x+rand()%(y-x+1)
比較:
rand()和random()實際并不是一個真正的偽隨機數發生器,在使用之前需要先初始化隨機種子,否則每次生成的隨機數一樣。
arc4random() 是一個真正的偽隨機算法,不需要生成隨機種子,因為第一次調用的時候就會自動生成。而且范圍是rand()的兩倍。在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值則是 0x100000000 (4294967296)。
精確度比較:arc4random() > random() > rand()。
//? 1. rand(),不加這句每次產生的隨機數不變
srand((unsigned)time(0));
int i = rand() % 100;
// 2. random()
srandom(time(0));
int i = random() % 100;
// 3. arc4random()
int i = arc4random() % 100 ;