推 lovesnake:rand * rand? 05/14 18:12
→ lovesnake:這樣夠大了吧XD 還是你要三次方 www 05/14 18:12
→ lovesnake:不過這樣會影響機率啦~ 不介意的話 05/14 18:14
→ lovesnake:在不然就自己實作亂數產生器囉~ 05/14 18:14
→ bernachom:今天看書上寫,忘了是哪本書,他說有lrand_max() 05/14 18:15
→ bernachom:最大是2147483647 05/14 18:15
→ bernachom:不知道他是可以產生到這麼大,還是最大可以到這樣..@@ 05/14 18:16
→ bernachom:然後我又查到JAVA好像範圍更大 05/14 18:16
→ bernachom:想試看看C++行不行這樣子.. 05/14 18:17
推 sjgau:(rand() << 15) + (rand()); 05/14 18:20
→ bernachom:請教一下,所以這樣子產生出來的最大數是2147483647嗎? 05/14 18:33
→ bernachom:謝謝 05/14 18:33
→ bernachom:我爬文後,查到還有其它方式 05/14 18:55
→ bernachom:不過我想問的是,超過32767的數值是不是很不平均產生呢? 05/14 18:56
→ bernachom:謝謝 05/14 18:56
推 Chikei:vs08又是C++建議直接用tr1/random 05/14 19:43
→ chunhsiang:對 RAND*RAND不會是平均分布 05/14 20:20
→ bernachom:我查到的是這個 05/14 21:04
→ bernachom:(rand() << 17) + (rand() << 2) + (rand() & 3) 05/14 21:05
→ bernachom:感覺和上面的推文差不多的方式,應該是平均分佈才是.. 05/14 21:05
推 EdisonX:lrand_max() 是非標準. std::tr1::mt19937 好用 !! 05/14 21:20
→ bernachom:我試試看,我沒用過這個~ 05/14 21:43
→ bernachom:不過上面那個我推文找的那個會有問題嗎? 05/14 21:44
→ bernachom:因為他可以表示32bit unsigned int,感覺還不錯@@ 05/14 21:44
推 EdisonX:若只是拿來做簡單統計可以,但有些數值一定產生不出來, 05/14 21:45
→ bernachom:真的假的@@產不出來... 05/14 21:46
→ EdisonX:如組合後之結果絕不可能為0,因rand()不會連續出現相同數. 05/14 21:46
→ bernachom:因為我最真的有跑過32bit 能表示的最大數測試過 05/14 21:46
→ bernachom:可是我有跑出0過耶!! 05/14 21:47
→ bernachom:我0和32bit的最大值都試過,都有跑出來,可是要等一陣子 05/14 21:47
→ bernachom:我是隨便用迴圈下去跑的,跑個1000萬次還100萬次 05/14 21:48
→ bernachom:有找到0或32bit最大表示值的就印出來 05/14 21:48
→ bernachom:然後等了一陣子才看到...才放心一下下QQ 05/14 21:48
→ bernachom:我來試試看 05/14 21:57
→ bernachom:跑了好久,0還沒出來,可是最大數出來兩個了...冏 05/14 22:07
→ bernachom:可是我今天真的有看到0過呀QQ 05/14 22:08
→ EdisonX:oh, 那就拿上面方法做就好了. 05/14 22:09
→ bernachom:不過我還是在搞懂您說的lrand_max() 05/14 22:10
→ bernachom:我去試一下怎麼用..>///< 05/14 22:10
→ flydragon198:現數值竟然都會一樣耶@@?? 05/14 22:51
→ bernachom:會印出負的? 05/14 22:58
→ flydragon198:說錯,是十億次 05/14 23:00
→ bernachom:確實很怪.話說,我今天有跑出0,可是剛才測都一直沒出現 05/14 23:01
→ bernachom:.............冏 05/14 23:01
→ bernachom:不知道是範圍太大很難出現,還是分佈不平均 = = 05/14 23:02
→ bernachom:我今天好像是用這個試的.. 05/14 23:10
→ bernachom:1+( (rand() << 17) + (rand() << 2) + (rand() & 3) -1 05/14 23:11
→ bernachom:我等一下再試看看好了..T_T 05/14 23:11
推 flydragon198:如果跑的結果都會一樣,試幾次可能都一樣,以前我在 05/14 23:11
→ flydragon198:寫這個的時候,我記得好像在rand()的()內有加變數還 05/14 23:12
→ flydragon198:是哪裡有加什麼去打亂變數種子的樣子~~~ 05/14 23:12
→ bernachom:我寫的那個我還沒看過,全部的值,我等一下來確認一下 05/14 23:12
→ bernachom:您說的每一百億次印出來都是一樣的值 05/14 23:16
→ bernachom:是說每一百億次就重複一次的意思嗎? 05/14 23:17
→ bernachom:我看我寫的好像沒有重複耶?不過我只看前10個而已 05/14 23:17
推 flydragon198:srand(time(NULL)); 將這一行加在for迴圈第一行 05/14 23:17
→ flydragon198:我是加上這行,就不會重複了~~~ 05/14 23:18
→ bernachom:....冏....原來是忘了加... 05/14 23:19
推 flydragon198:你記錄前十個的值,然後重新跑一遍,還會是同樣的十 05/14 23:29
→ flydragon198:個值,每次重複跑都會一樣~~ 05/14 23:29
→ bernachom:我直接按F5看,好像也都不一樣 05/14 23:32
推 flydragon198:你有加srand的這個不會~~~~ 05/14 23:35
→ bernachom:我一直以為你跟我是加了之後還會.... 05/14 23:36
→ bernachom:我知道了,謝謝^_^ 05/14 23:38
推 amozartea:比照大數阿, 寫個陣列每個位置0~9? 05/15 01:30
→ blackwindy:剛剛才看到這篇...怎麼一堆人都沒加srand 05/21 13:31
→ blackwindy:你不打亂seed出來的亂數當然就會有重複的現象 05/21 13:31