看板 C_and_CPP 關於我們 聯絡資訊
想到好久以前的資結作業~~~ 要平均的話,如果不計較時間複雜度高,可以用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
EdisonX:這種方式也有缺點,像是 1111/2222/..../xxxx 不可能產生 05/14 21:22
會嗎?? 還是我表達的意思有誤? 假設是塞入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)
EdisonX:回到lcm prng本質,若array size 大,會產生出n個相同之數值 05/14 21:34
EdisonX:代表該 prng 應還不夠符合 min std prng. 05/14 21:35
EdisonX:不過若只是拿來做簡單統計用的話,也不需在太意這問題. 05/14 21:36
恩恩,了解,多學了一課~~ 像這些比較深入的問題,平常不會注意到~~ ※ 編輯: flydragon198 來自: 114.47.135.183 (05/14 21:39)
EdisonX:<目前rand()都是 LCG 法,所以品質有限,拿來做簡易統計可> 05/14 21:38
剛剛又突然想到,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)
EdisonX:耶..我要說的是,如果能夠連續有n個相同規律的話,它的均勻 05/14 21:59
EdisonX:性(原始的rand())應是不夠的.. 05/14 22:01
flydragon198:喔喔,了解,是我誤會了~~~ 05/14 22:04
AstralBrain:丟骰子也有可能連出10個6啊 為什麼會說均勻性不夠 05/14 22:06
AstralBrain:如果"一定不會"才有問題吧 05/14 22:06
EdisonX:疑!! A 大說得有理 !! 05/14 22:08