Re: [請益] 亂數表有沒有規律??

看板ask-why (知識奧秘)作者 (吹笛牧童)時間17年前 (2009/05/20 20:24), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串16/19 (看更多)
: → littleshan:我是說,你提到「打字間隔集中在0.3~0.7秒」的問題 05/20 12:30 : → littleshan:只要用高精確度的 timer 就可以解決 05/20 12:31 : → littleshan:除非你的手能控制打字間隔落在 X.XX3 秒至 X.XX7 秒間 05/20 12:32 首先說,我看不懂前一篇的質數;我就是需要一個數學家來幫我 (這樣我就不必多回一篇了) 再來我提一下我不懂的細節,而且我不認為夠密就當然夠均勻 舉例來說,如果我有一個夠均勻的亂數,十種變化 int r=random(); // 0~9 我要把它縮小到 9種變化 int R= (r/9.0)*8; // 0~8 這樣,因為不是擴展,絕對不可能有變化太少的問題 但可能偏重於某幾個變化 假設亂數函式並不亂,只是均勻,只是我做證明的工具 我當然可以給它一個偽函式,就簡單遞增,到最大值時繞捲為 0 好了 於是,r= 0,1,2,3,4,5,6,7,8,9 依序十次 而 R= 0,0,1,2,3,4,5,6,7,8 以無條件捨去來做浮點轉換 反正就算你要四捨五入也會有一樣的問題 好,以上 0 出現兩次 亂數的均勻度要大量才能趨近,否則我只有9種值卻要求做10次,當然不可能公平 那我們做90次好了 (9和10的公倍數;我隱隱聞到質數的道理,但又無法了解) 這90次裏,我希望 r 均勻出現 0~9 九次 然後 R=f(r) 這個公式要改一下,就可以讓 0~8 均勻出現十次 (九十次做完次數才對就好了;但簡單的答案中,循環出現也是可以接受的 因為我不討論有多亂,只先討論均勻) 從這裏可以看出,如果我只有簡單的公式做 R=f(r) 那麼做十次,R=0 會重覆出現兩次 做90次呢?它重覆出現 20次 而畫成圖會怎樣?就是在 R=0 的位置比較粗,變一條直線 不均勻就是這樣呀~ 因為只有用簡單的公式去把原始亂數擴展或縮小到我要的範圍 原本的 0x00~0xFF 擴展成 0x0000~0xFFFF,我還算有直覺去解 然後我可以把 65536 的變化程度向內縮,去滿足任何一種(小於65536)範圍的亂數需求 但是這條不均勻惹出的直線,始終會非常明顯 光要亂數是有啦 但好像尾牙抽獎,0號那位同仁每次都比別人多一個中獎機會 你說,這亂數公平嗎? 或者我不要用乘法,用捨去法可以嗎? R=r,但當 r=9 時,重抽一次 這樣我可不可以聲明 R 的均勻度公平了? 只是有 1/10 的機率會使計算減慢(重抽一次) 當然,大部份時候,這樣設計程式都叫想太多 我們很簡單的把原始亂數除到變成 0~1 的浮點數再乘開就好了 沒有人會知道其實他天生中獎率就比別人低了 只怪他命不好 :P 不好意思,也有黑心程式 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.219.65.16

05/20 21:20, , 1F
把9丟掉就好啦?
05/20 21:20, 1F
如果可以,好像最省事 XD,但如果我要縮至 0~3..總之小心累死,不斷重抽.. ※ 編輯: HuangJC 來自: 61.219.65.16 (05/20 22:14)
文章代碼(AID): #1A4_PfiB (ask-why)
討論串 (同標題文章)
文章代碼(AID): #1A4_PfiB (ask-why)