rand 與 arc4random 的選用

2021-06-10 10:46:59 字數 779 閱讀 1955

在iphone中有幾個內嵌的隨機數發生器,很多人的第一反應可能就是在呼叫如下函式後使用rand():

srandom(time(null)); 

但是……,rand()實際並不是乙個真正的偽隨機數發生器,random()會相對好點,但也不算理想。幸運的是iphone上還有其他的選擇。個人來說我首選arc4random() ,原因就是它是乙個真正的偽隨機演算法,而且範圍是rand()的兩倍。

在iphone中,rand_max是0x7fffffff (2147483647),而arc4random()返回的最大值則是 0x100000000 (4294967296),從而有更好的精度。此外,使用arc4random()還不需要生成隨機種子,因為第一次呼叫的時候就會自動生成。

通過arc4random() 獲取0到x-1之間的整數的**如下:

int value = arc4random() % x; 

獲取1到x之間的整數的**如下: 

int value = (arc4random() % x) + 1; 

其中,根據預算優先順序括號實際是不需要的,不過我還是對括號格外小心。 

最後如果想生成乙個浮點數,可以在專案中定義如下巨集:

#define arc4random_max      0x100000000 

然後就可以使用arc4random() 來獲取0到100之間浮點數了(精度是rand()的兩倍),**如下:

double val = floorf(((double)arc4random() / arc4random_max) * 100.0f); 

iOS中的arc4random方法

通過arc4random 獲取0到x 1之間的整數的 如下 int value arc4random x 獲取1到x之間的整數的 如下 int value arc4random x 1 最後如果想生成乙個浮點數,可以在專案中定義如下巨集 define arc4random max 0x1000000...

產生隨機數 arc4random 函式

問題 產生一組 四個 隨機數。要求 每組隨機數隨機生成數字 字母 分大小寫 char vercode 定義隨機數字元 int length sizeof vercode sizeof char 計算陣列長度 int one arc4random length 定義四個隨機數 int two arc4...

IOS中的隨機數arc4random方法

通過arc4random 獲取0到x 1之間的整數的 如下 int value arc4random x 獲取1到x之間的整數的 如下 int value arc4random x 1 最後如果想生成乙個浮點數,可以在專案中定義如下巨集 define arc4random max 0x1000000...