火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 10462|回复: 73
打印 上一主题 下一主题

[视窗] [开源]水淼随机数类,实现真随机效果

  [复制链接]

367

主题

2239

帖子

7273

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7273
跳转到指定楼层
楼主
发表于 2022-5-9 21:58:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 shuimiao 于 2022-9-18 09:43 编辑

因为发现易语言和火山的取随机数()方法是伪随机,总是取最小值附近的值(低域值),而不是随机低或高。
如想取5万到900万的随机值,结果都是5到8万的随机值,完全不存在9万到900万之间的值。
为了解决这个问题,水淼经过研究后发现可以使用取随机数和取随机小数进行结合,实现接近真随机的效果。

经过测试,在调试版下,水淼真随机耗时是火山伪随机的6倍左右,为了真随机效果,这点性能牺牲是可以接受的,一般情况下根本看不出来,尤其是现在配置越来越好。

游客,如果您要查看本帖隐藏内容请回复





评分

参与人数 1金钱 +1 收起 理由
朕的 + 1 水淼 很厉害,每次开源都是干货满满.

查看全部评分

回复

使用道具 举报

367

主题

2239

帖子

7273

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7273
来自 40#
 楼主| 发表于 2022-7-7 14:58:16 | 只看该作者
kyozy 发表于 2022-7-7 13:45
你这叫随机均匀分布

均匀分布的是那个不重复随机类。里面有2个类,一个真随机类,一个基于真随机类的应用类(不重复随机类)
回复

使用道具 举报

367

主题

2239

帖子

7273

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7273
沙发
 楼主| 发表于 2022-5-9 21:58:42 | 只看该作者
正在启动被调试程序
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倍左右。
回复

使用道具 举报

52

主题

734

帖子

3442

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
3442
板凳
发表于 2022-5-9 22:33:19 | 只看该作者
学习一下
回复

使用道具 举报

17

主题

794

帖子

2639

积分

金牌会员

Rank: 6Rank: 6

积分
2639
地板
发表于 2022-5-9 23:01:03 | 只看该作者
学习....
回复

使用道具 举报

7

主题

407

帖子

2148

积分

金牌会员

Rank: 6Rank: 6

积分
2148
QQ
5#
发表于 2022-5-10 00:16:45 | 只看该作者
感谢分享
回复

使用道具 举报

13

主题

87

帖子

382

积分

中级会员

Rank: 3Rank: 3

积分
382
6#
发表于 2022-5-10 00:20:46 | 只看该作者
这个很实用,随机数确实不够随机
回复

使用道具 举报

5

主题

212

帖子

2476

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2476
7#
发表于 2022-5-10 00:25:31 | 只看该作者
回复

使用道具 举报

75

主题

828

帖子

4194

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
4194
8#
发表于 2022-5-10 01:06:39 | 只看该作者
计算机里,没有真随机的概念..全部都是伪随机的...
回复

使用道具 举报

46

主题

466

帖子

2398

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
2398
9#
发表于 2022-5-10 08:12:03 | 只看该作者
把取随机数的范围缩小,再加个算法来放大就行了,
回复

使用道具 举报

367

主题

2239

帖子

7273

积分

核心用户

Rank: 9Rank: 9Rank: 9

积分
7273
10#
 楼主| 发表于 2022-5-10 08:32:48 来自手机 | 只看该作者
suyan 发表于 2022-5-10 08:12
把取随机数的范围缩小,再加个算法来放大就行了,

缩小范围有啥用,人家就是要这个范围啊。不能在最大值和最小值那里改变,而应该算法内部去改变
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-4-24 18:50 , Processed in 0.104789 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表