作者:
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, 參數傳幾位數這樣
作者: WBTs (加權平衡樹) 2016-05-09 08:05:00
會不會是你取亂數時間太近,看你用time()來取,把取亂數時間拉長試試
那樣就不叫亂數了阿.......0~10000有90%的數字都是四位數,當然都看到四位數阿..
作者: WBTs (加權平衡樹) 2016-05-09 10:18:00
剛剛忘了考慮機率,那你應該要把1,2,3,4位數的機率拉平,像是各亂數取20個再亂數放到陣列,再亂數取陣列的吧
阿rand()產生n和p 回傳n * pow(10, p)不就結了p 範圍從正取到負就如你所想
真正的亂數,差異應該是隨機的,每次都差很多反而不太像真實的亂數
作者:
Caesar08 (Caesar)
2016-05-09 11:01:00你只要不要採取一樓的做法就好沒事,我看錯了。不過那種方式就變成有條件的亂數了另外,關於亂數的產生,請絕對不要自己寫,麻煩用已知的generator,如rand或srand(不太好),或<random>裡的
作者:
yoco (眠月)
2016-05-11 00:43:00..................保重 T_T
如果想產生亂數的各種位數分佈的機率差不多的話:int rand10(int exp10) {int min=(int)pow(10, exp10-1), num=min*9;return (rand()%exp10) ? (rand10(--exp10)): (rand()%num+min); }
為何不用Std 的distribution 還要繼續用舊的rand
作者:
noodleT (麵T)
2016-05-11 12:09:00distribution 是 Cpp11,我還在用老版本…
作者:
Caesar08 (Caesar)
2016-05-11 12:31:00因為網路上的範例都是rand。因為教授不會用C++11