1)、arc4random() 比較精確不需要生成隨即種子
使用方法 :
通過arc4random() 獲取0到x-1之間的整數的**如下:
int value = arc4random() % x;
獲取1到x之間的整數的**如下:
int value = (arc4random() % x) + 1;
2)、ccrandom_0_1() cocos2d中使用 ,範圍是[0,1]
使用方法:
float random = ccrandom_0_1() * 5; //[0,5] ccrandom_0_1() 取值範圍是[0,1]
3)、random() 需要初始化時設定種子
使用方法:
srandom((unsigned int)time(time_t *)null); //初始化時,設定下種子就好了。
rand()實際並不是乙個真正的偽隨機數發生器,random()會相對好點,但也不算理想。幸運的是iphone上還有其他的選擇。個人來說我首選arc4random() ,原因就是它是乙個真正的偽隨機演算法,而且範圍是rand()的兩倍。
-(
float
)randomfloatbetween
:(float
)num1 andlargerfloat
:(float
)num2
在一些產品的源**中,經常會發現有這樣的語句,
srand(unsigned(time(null)));
為什麼要這樣做呢,其實很簡單。
1. time()函式表示返回1970-1-1 00:00:00 到當前時間的秒數,而time(null)表示獲取乙個時間,準確的說,獲取乙個指標的位址。
2. srand()函式是產生隨機數種子的。在產生隨機數 rand()被呼叫的時候,他會檢視:如果使用者之前呼叫過 srand(seed)的話,他會重新呼叫一遍 srand(seed)以產生隨機數種子;如果發現沒有呼叫過 srand(seed)的話,會自動呼叫 srand(1)一次。所以,如果希望rand()每次呼叫產生的值都不一樣,就需要每次呼叫srand(seed)一次,而且seed不能相同。
綜合上述兩點,那就很明了了。
srand(unsigned(time(null)))表示產生隨機數種子以保證rand()呼叫的時候不會出現重複的隨機值。
2015/12/14 update
objective-c 中有個arc4random()函式用來生成隨機數且不需要種子,但是這個函式生成的隨機數範圍比較大,需要用取模的演算法對隨機值進行限制,有點麻煩。
其實 objective-c有個更方便的隨機數函式arc4random_uniform(x),可以用來產生0~(x-1)範圍內的隨機數,不需要再進行取模運算。如果要生成1~x的隨機數,可以這麼寫:
arc4random_uniform(x)+1。
生成0-x之間的隨機正整數
int
value
=arc4random_uniform(x + 1);
生成隨機正整數
int
value
= 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);
生成隨機數的三種方法
1.math類的靜態方法random double math.random 0 1 之間的double型數 2.random r new random r.nextdouble 在 0 1 之間的double型數 r.nextfloat 在 0 1 之間的float型數 r.nextint 在int...
c 隨機數生成編號 C 生成隨機數的三種方法
隨機數的定義為 產生的所有數字毫無關係.在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.在c 中獲取隨機數有三種方法 一.random 類 random類預設的無參建構函式可以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數.這種隨機數可以達到一些要求較低的目標,但是如果...
C 生成隨機數的三種方法
隨機數的定義為 產生的所有數字毫無關係.在實際應用中很多地方會用到隨機數,比如需要生成唯一的訂單號.在c 中獲取隨機數有三種方法 一.random 類 random類預設的無參建構函式可以根據當前系統時鐘為種子,進行一系列演算法得出要求範圍內的偽隨機數.12 random rd newrandom ...