[问题] 如何制造差异很大的乱数?

楼主: 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