iOS-隨機數
在C中提供了rand()、srand()、random()、arc4random()幾個函數。
使用 arc4random 產生隨機數
1.1 擷取一個隨機整數範圍在:[0,100)包括0,不包括100
int x = arc4random() % 100;
1.2 擷取一個隨機數範圍在:[100,200],包括100,包括200
int y =100 + (arc4random() % 101);
1.3抽取方法
擷取一個隨機整數,範圍在[from,to],包括from,包括to
-(int)getRandomNumber:(int)from to:(int)to { return (int)(from + (arc4random() % (to – from + 1))); }
使用 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 ;