Re: [問題] 產生超過32767的亂數
看板C_and_CPP (C/C++)作者flydragon198 (Richard)時間14年前 (2012/05/14 21:19)推噓3(3推 0噓 8→)留言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
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
05/14 21:34, 2F
→
05/14 21:35, , 3F
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
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
05/14 21:59, 6F
→
05/14 22:01, , 7F
05/14 22:01, 7F
→
05/14 22:04, , 8F
05/14 22:04, 8F
推
05/14 22:06, , 9F
05/14 22:06, 9F
→
05/14 22:06, , 10F
05/14 22:06, 10F
→
05/14 22:08, , 11F
05/14 22:08, 11F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章