[开源]水淼随机数类,实现真随机效果
本帖最后由 shuimiao 于 2022-9-18 09:43 编辑因为发现易语言和火山的取随机数()方法是伪随机,总是取最小值附近的值(低域值),而不是随机低或高。
如想取5万到900万的随机值,结果都是5到8万的随机值,完全不存在9万到900万之间的值。
为了解决这个问题,水淼经过研究后发现可以使用取随机数和取随机小数进行结合,实现接近真随机的效果。
经过测试,在调试版下,水淼真随机耗时是火山伪随机的6倍左右,为了真随机效果,这点性能牺牲是可以接受的,一般情况下根本看不出来,尤其是现在配置越来越好。
**** Hidden Message *****
kyozy 发表于 2022-7-7 13:45
你这叫随机均匀分布
均匀分布的是那个不重复随机类。里面有2个类,一个真随机类,一个基于真随机类的应用类(不重复随机类) 正在启动被调试程序
50268
70573
78477
60007
70810
78636
67749
72345
64467
59474
78338
75871
67630
75899
77590
77999
51160
55791
55968
80544
73628
73759
70874
67022
61365
81196
77556
71680
64224
76969
火山自带伪随机,三百万次耗时, 218
54803
767969
2779948
544350
2860272
252158
948078
6318851
816006
1408608
1366611
57398
53433
601255
54314
1171024
283396
50048
2542838
50277
65675
1249003
50355
51587
62541
74499
554614
5055576
2002821
51021
水淼真随机,三百万次耗时, 1547
50944.6707134799
176336.367218553
93479.3653984782
1192588.4421913
2736497.36727589
125093.078068755
4646869.4531262
162375.889579124
8130866.42048402
3963702.3501876
180557.130466203
3390757.09387301
93432.3031590019
316121.317383113
2042202.03842091
329315.732475671
65701.8345302108
2558889.84668637
77064.3257203909
5039460.43275246
68566.574063054
2089826.58445389
52559.7964710848
748150.494035917
4575966.29075787
201388.399598609
5418004.46667072
6787287.51487777
561043.00201504
493903.849308914
水淼真随机(取小数),三百万次耗时, 1672
5
22
21
7
24
20
29
3
17
30
14
9
25
27
2
23
8
15
4
10
11
6
13
18
12
1
16
26
28
19
上面是30次不重复效果
水淼不重复随机,三百万次耗时, 6313
以上测试为调试版,水淼真随机三百万次耗时是火山自带伪随机的6倍左右。
学习一下 学习.... 感谢分享 这个很实用,随机数确实不够随机 :) 计算机里,没有真随机的概念..全部都是伪随机的... 把取随机数的范围缩小,再加个算法来放大就行了,
suyan 发表于 2022-5-10 08:12
把取随机数的范围缩小,再加个算法来放大就行了,
缩小范围有啥用,人家就是要这个范围啊。不能在最大值和最小值那里改变,而应该算法内部去改变