[問題] 如何製造差異很大的亂數?

作者: uioty (uioty)   2016-05-09 06:13:25
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
Linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
No
問題(Question):
想要製造出一串亂數,希望這些亂數的差異要很大。
目前的亂數是取 rand()%10000
結果產生出的亂數大部分都是四位數
希望可以產生出 0,1234, 99, 567, 10080...等等差異很大的
餵入的資料(Input):
跑程式的時候用argv 讀入要產生多少亂數
預期的正確結果(Expected Output):
就是希望可以產生更亂的數字這樣
錯誤結果(Wrong Output):

程式碼(Code):(請善用置底文網頁, 記得排版)
就是一般的亂數程式碼,例如
srand(time(null));
int n = rand()%10000;
這樣
補充說明(Supplement):
是要跑simplescalar,分析cache效能用的
(分析在某個排序演算法中,cache設定值的數據)
因為目前產生出的數字都是四位數
跑出來的數據好像不論在哪種associativity的設定都相差不大
然後就自己去手動產生了一串差異較大的數字,發現這樣數據會比較有趣(?)
想說是不是亂數產生的部分要再亂一點...
作者: flere (人間失格)   2016-05-09 06:36:00
多寫幾個function, 分別產生1位數, 2位數, ...的再寫一個function, 來決定每次要用哪個function產生數字(?)多寫幾個function->可以用一個function, 參數傳幾位數這樣
作者: Schottky (順風相送)   2016-05-09 06:39:00
..... 請問你有學過機率嗎?
作者: WBTs (加權平衡樹)   2016-05-09 08:05:00
會不會是你取亂數時間太近,看你用time()來取,把取亂數時間拉長試試
作者: james732 (好人超)   2016-05-09 09:26:00
你這樣有條件的亂數還算是亂數嗎?XD
作者: BSpowerx (B.S)   2016-05-09 09:37:00
那樣就不叫亂數了阿.......0~10000有90%的數字都是四位數,當然都看到四位數阿..
作者: Ebergies (火神)   2016-05-09 09:49:00
哈哈哈 XD
作者: WBTs (加權平衡樹)   2016-05-09 10:18:00
剛剛忘了考慮機率,那你應該要把1,2,3,4位數的機率拉平,像是各亂數取20個再亂數放到陣列,再亂數取陣列的吧
作者: MOONRAKER (㊣牛鶴鰻毛人)   2016-05-09 10:40:00
阿rand()產生n和p 回傳n * pow(10, p)不就結了p 範圍從正取到負就如你所想
作者: flydragon198 (Richard)   2016-05-09 10:41:00
真正的亂數,差異應該是隨機的,每次都差很多反而不太像真實的亂數
作者: Caesar08 (Caesar)   2016-05-09 11:01:00
你只要不要採取一樓的做法就好沒事,我看錯了。不過那種方式就變成有條件的亂數了另外,關於亂數的產生,請絕對不要自己寫,麻煩用已知的generator,如rand或srand(不太好),或<random>裡的
作者: noodleT (麵T)   2016-05-10 20:26:00
要找到如這種曲線的方程式 http://imgur.com/ld6TKqz透過均勻分布亂數 x 得到對應的 y方程式的兩端要保持平滑、中間要陡這參考看看 http://ideone.com/vaJ3bp
作者: yoco (眠月)   2016-05-11 00:43:00
..................保重 T_T
作者: Hazukashiine (私は幸せです)   2016-05-11 04:21:00
如果想產生亂數的各種位數分佈的機率差不多的話:int rand10(int exp10) {int min=(int)pow(10, exp10-1), num=min*9;return (rand()%exp10) ? (rand10(--exp10)): (rand()%num+min); }
作者: steve1012 (steve)   2016-05-11 07:08:00
為何不用Std 的distribution 還要繼續用舊的rand
作者: noodleT (麵T)   2016-05-11 12:09:00
distribution 是 Cpp11,我還在用老版本…
作者: Caesar08 (Caesar)   2016-05-11 12:31:00
因為網路上的範例都是rand。因為教授不會用C++11

Links booklink

Contact Us: admin [ a t ] ucptt.com