Re: [問題] 產生超過32767的亂數

看板C_and_CPP (C/C++)作者 (Richard)時間14年前 (2012/05/14 21:19), 編輯推噓3(308)
留言11則, 3人參與, 最新討論串2/4 (看更多)
想到好久以前的資結作業~~~ 要平均的話,如果不計較時間複雜度高,可以用bit的方式 產生亂數,塞入個位數,產生亂數,塞入十位數, 產生亂數,塞入百位數............etc 還有很多的方法~~~~ 然後這個問題有一個蠻常被計較的地方就是亂數不平均。 例如我們之前用rand() % N,其實會有些亂數比較常出現,機率可能只多 千分或萬分之一,但是跑個一萬次或十萬次,差距就很驚人了...... ※ 引述《bernachom (Terry)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : vc08 : 問題(Question): : 請教一下 : rand產生像只有到32767,能產生超過32767的數值嗎? : 我試著改成這個樣子 : long rand_number= rand()%(2147483647); 這樣不行的原因是因為,rand產生的值就在0~32767 N如果是(0~32767) % 2147483647, 那麼值就等於N 5/100 和5/100000,都一定是餘5 : 好像也不太行 : 不知道有沒有好方法 : 謝謝幫忙 -- 我們一路奮戰所作的一切,不是為了改變世界,而是為了不讓世界改變我們----熔爐 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.47.135.183

05/14 21:22, , 1F
這種方式也有缺點,像是 1111/2222/..../xxxx 不可能產生
05/14 21:22, 1F
會嗎?? 還是我表達的意思有誤? 假設是塞入10個bit,產生rand%2,然後 a[0] a[1] a[2] a[3] a[4] a[5] rand%2 rand%2 rand%2 rand%2 rand%2 rand%2 1111如果用2進位的bit來表示,就是10001010111 還是有機會產生吧? 如果是 a[0] a[1] a[2] a[3] a[4] rand%10 rand%10 rand%10 rand%10 rand%10 1111或2222也可能會產生呀??? 請問不可能產生的問題是出在哪?? ※ 編輯: flydragon198 來自: 114.47.135.183 (05/14 21:31)

05/14 21:34, , 2F
回到lcm prng本質,若array size 大,會產生出n個相同之數值
05/14 21:34, 2F

05/14 21:35, , 3F
代表該 prng 應還不夠符合 min std prng.
05/14 21:35, 3F

05/14 21:36, , 4F
不過若只是拿來做簡單統計用的話,也不需在太意這問題.
05/14 21:36, 4F
恩恩,了解,多學了一課~~ 像這些比較深入的問題,平常不會注意到~~ ※ 編輯: flydragon198 來自: 114.47.135.183 (05/14 21:39)

05/14 21:38, , 5F
<目前rand()都是 LCG 法,所以品質有限,拿來做簡易統計可>
05/14 21:38, 5F
剛剛又突然想到,rand不會產生相同的數值,還是可以產生1111呀 例如產生 5 7 9 11 5%2 7%2 9%2 11%2 結果就是1111,並不是rand產生四次同樣數值得到1111 要產生0也是一樣 產生 100 200 500 1000 100%2 200%2 500%2 1000%2 結果就是0 ※ 編輯: flydragon198 來自: 114.47.135.183 (05/14 21:55)

05/14 21:59, , 6F
耶..我要說的是,如果能夠連續有n個相同規律的話,它的均勻
05/14 21:59, 6F

05/14 22:01, , 7F
性(原始的rand())應是不夠的..
05/14 22:01, 7F

05/14 22:04, , 8F
喔喔,了解,是我誤會了~~~
05/14 22:04, 8F

05/14 22:06, , 9F
丟骰子也有可能連出10個6啊 為什麼會說均勻性不夠
05/14 22:06, 9F

05/14 22:06, , 10F
如果"一定不會"才有問題吧
05/14 22:06, 10F

05/14 22:08, , 11F
疑!! A 大說得有理 !!
05/14 22:08, 11F
文章代碼(AID): #1FiGPd8o (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1FiGPd8o (C_and_CPP)