iOS 中生成隨機(jī)數(shù)的4種方法

C語言中生成隨機(jī)數(shù)的一種方法戈次。
隨機(jī)產(chǎn)生[0~10)之間的的數(shù) ,注意:不包括10

     #include <stdlib.h> //srand
     #include <time.h>     //time

    srand((unsigned int )time(NULL)); 
    int h[10];
    for (int i = 0;i < 10;i++) {
        int r =  rand() % 10+1;
        h[i] = r;
    }

解析:

1.rand()函數(shù)并不是一個(gè)真正的偽隨機(jī)數(shù)發(fā)生器娃兽,在產(chǎn)生隨機(jī)數(shù)前,需要系統(tǒng)提供的生成偽隨機(jī)數(shù)序列的種子芒帕,rand根據(jù)這個(gè)種子的值產(chǎn)生一系列隨機(jī)數(shù)玷禽。如果系統(tǒng)提供的種子沒有變化,每次調(diào)用rand()函數(shù)生成的偽隨機(jī)數(shù)序列都是一樣的乌询。

2.srand(unsigned seed)通過參數(shù)seed改變系統(tǒng)提供的種子值榜贴,從而可以使得每次調(diào)用rand()函數(shù)生成的偽隨機(jī)數(shù)序列不同,從而實(shí)現(xiàn)真正意義上的“隨機(jī)”妹田。

3.通郴5常可以利用系統(tǒng)時(shí)間來改變系統(tǒng)的種子值,即srand(time(NULL))鬼佣,可以為rand()函數(shù)提供不同的種子值驶拱,進(jìn)而產(chǎn)生不同的隨機(jī)數(shù)序列

4.time的時(shí)間經(jīng)度較低,每55ms變動(dòng)一次晶衷,也就說每55ms生成一個(gè)隨機(jī)種子蓝纲。

5.由于計(jì)算機(jī)運(yùn)行速度很快,執(zhí)行完上述代碼也不用55ms晌纫,所以如果放在for循環(huán)里面税迷,每次得到的隨機(jī)種子都是一樣,而rand()是根據(jù)隨機(jī)種子的值產(chǎn)生一系列隨機(jī)數(shù)锹漱,因而每次得出的隨機(jī)數(shù)都是一樣的箭养。

6.rand()生成的隨機(jī)數(shù)范圍為:( 0~RAND_MAX)。這個(gè)值很大哥牍,需要用取模的方法對(duì)隨機(jī)值進(jìn)行限制毕泌。

7.RAND_MAX的值為:0x7fffffff(這是16進(jìn)制的值)換算成十進(jìn)制為: 2147483647

    srand((unsigned int )time(NULL));
    int h[10];
    for (int i = 0;i < 10;i++) {
        int r =  rand() % 10+1;
        h[i] = r;
        NSLog(@"%d",r);
    }
    
    NSLog(@"生成的隨機(jī)種子一樣,得出的隨機(jī)數(shù)一樣");
    
    srand((unsigned int )time(NULL));
    int b[10];
    for (int i = 0;i < 10;i++) {
        int r =  rand() % 10+1;
        b[i] = r;
        NSLog(@"%d",r);
    }


iOS 有如下四種隨機(jī)數(shù)方法砂心,下面以產(chǎn)生 [0,100)(不包含100)的隨機(jī)數(shù)為例:

  1. srand((unsigned)time(0));
    int i = rand() % 100;
  2. srandom(time(0));
    int i = random() % 100;
  3. int i = arc4random() % 100;
  4. int i = arc4random_uniform(100)

注:
1.rand()和random()實(shí)際并不是一個(gè)真正的偽隨機(jī)數(shù)發(fā)生器懈词,在使用之前需要先初始化隨機(jī)種子,否則每次生成的隨機(jī)數(shù)一樣辩诞。

2.arc4random()和arc4random_uniform(u_int32_t)是一個(gè)真正的偽隨機(jī)算法坎弯,不需要生成隨機(jī)種子,因?yàn)榈谝淮握{(diào)用的時(shí)候就會(huì)自動(dòng)生成译暂。而且生成的隨機(jī)數(shù)的范圍是rand()的兩倍抠忘。

3.arc4random()函數(shù)需要用取模的算法對(duì)隨機(jī)值進(jìn)行限制。
arc4random_uniform(x)函數(shù)不需要再進(jìn)行取模運(yùn)算外永,直接生成隨機(jī)數(shù)崎脉。

4.在iPhone中,RAND_MAX的值為:0x7fffffff (2147483647)伯顶,而arc4random()或arc4random_uniform(u_int32_t)返回的最大值則是 0x100000000 (4294967296)囚灼。
精確度比較:arc4random_uniform(u_int32_t) = arc4random() > random() > rand()骆膝。


以下為各個(gè)函數(shù)的返回類型:

在頭文件stdlib.h中定義

int  rand(void) __swift_unavailable("Use arc4random instead.");
long     random(void) __swift_unavailable("Use arc4random instead.");
uint32_t
     arc4random_uniform(uint32_t __upper_bound) __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_4_3);
uint32_t arc4random(void);

uint_32_t的定義:typedef unsigned int uint32_t;


產(chǎn)生從X~Y的隨機(jī)數(shù)
X~Y有 Y-X+1個(gè)數(shù)
K= rand() % (Y-X+1) + X

參考:
1.iOS 中生成隨機(jī)數(shù)的4種方法(rand、random灶体、arc4random阅签、arc4random_uniform)
2.sand _百度百科

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蝎抽,隨后出現(xiàn)的幾起案子政钟,更是在濱河造成了極大的恐慌,老刑警劉巖樟结,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养交,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瓢宦,警方通過查閱死者的電腦和手機(jī)碎连,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刁笙,“玉大人破花,你說我怎么就攤上這事∑N” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵前鹅,是天一觀的道長(zhǎng)摘悴。 經(jīng)常有香客問我,道長(zhǎng)舰绘,這世上最難降的妖魔是什么蹂喻? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮捂寿,結(jié)果婚禮上口四,老公的妹妹穿的比我還像新娘。我一直安慰自己秦陋,他們只是感情好蔓彩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驳概,像睡著了一般赤嚼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顺又,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天更卒,我揣著相機(jī)與錄音,去河邊找鬼稚照。 笑死蹂空,一個(gè)胖子當(dāng)著我的面吹牛俯萌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播上枕,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼咐熙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了姿骏?” 一聲冷哼從身側(cè)響起糖声,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎分瘦,沒想到半個(gè)月后蘸泻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘲玫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年悦施,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片去团。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抡诞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出土陪,到底是詐尸還是另有隱情昼汗,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布鬼雀,位于F島的核電站顷窒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏源哩。R本人自食惡果不足惜鞋吉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望励烦。 院中可真熱鬧谓着,春花似錦、人聲如沸坛掠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽却音。三九已至改抡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間系瓢,已是汗流浹背阿纤。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夷陋,地道東北人欠拾。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓胰锌,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親藐窄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子资昧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 方法1 (數(shù)據(jù)類型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math...
    GB_speak閱讀 40,994評(píng)論 2 6
  • 在C中提供了rand()、srand()荆忍、random()格带、arc4random()幾個(gè)函數(shù)來獲取隨機(jī)數(shù)。 使用 ...
    Mark_Ming閱讀 2,041評(píng)論 2 12
  • 最近一直使用隨機(jī)數(shù)刹枉,為了以后方便查閱叽唱,總結(jié)一下:在C中提供了rand()、srand()微宝、random()棺亭、arc...
    iOS_成才錄閱讀 91,656評(píng)論 8 43
  • 今天是立旗幟的第二天,心里空空的蟋软,只是再也沒有了眼淚镶摘。買房子時(shí)借了他四萬塊錢,當(dāng)時(shí)覺得他是最好說話的岳守,還想...
    妞妞喜歡扭一扭閱讀 234評(píng)論 0 0
  • 1 商人概念 “作為商人凄敢,本質(zhì)上就是追求利益最大化∈。” 這句話在西方社會(huì)公認(rèn)為是天經(jīng)地義的贡未。但是在國(guó)內(nèi),這個(gè)觀念目...
    昕城閱讀 520評(píng)論 10 4