吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5382|回复: 25
收起左侧

[易语言 转载] 关于易语言取随机数()命令中BUG修正计算方法

[复制链接]
缈淼 发表于 2020-2-8 22:53
本帖最后由 缈淼 于 2020-2-9 11:45 编辑

关于易语言取随机大数BUG修正方法
半年没登论坛了,最近新冠问题严重
我在模拟计算新冠离差曲线时发现易语言取随机数命令存在问题
经过测试易语言 取随机数()命令在取大范围时取出的数据并不是平均分布的,小数不影响。
随机数 0-999得到数据基本可以判定取得值基本是平均分布的
下面我们将取出的随机数经计算拟合为高斯分布曲线 也叫正态分布
1.png
1是易语言本身取出数据拟合后得到的高斯曲线,很明显得到的图像明显不规则,说明易语言取随机数范围较大时取出数据并不平行分布。
2是经过用小数修正后得到的高斯曲线,比较标准。
如果以上代码难以理解我换用下面方法解释一下
下面我们再用一种方法确认取随机大数的BUG问题
2.png
如上图0-16777215是全部颜色的范围,计算方法为RGB颜色转换为10进制颜色R+G*256+B*256*256=16777215
按照代码得到的图像应该是各种颜色平均分布到画布上,单得到的图像明显偏红,说明易语言自身取出的随机数并非平均分布,也非正态分布、偏态分布。
那么我们怎么办呢,这里先说一种大家可能认为对但是实际错误的方法
3.png
图像发红,肯定不对。
按照代码,将大数分为小数相乘(或者相加),这样得到的数据虽然解决了BUG问题但实际并非平均分布。
得到的数据属于拟高斯分布。图中源码取出所有范围内的一小部分数据,取到的数据也非偏态分布。
类似的方法相加得到的随机数也是高斯分布。无法达到取随机数的预期为什么不是平均分布这是一个概率问题。如果需要深入了解可下载我的缈淼模块里面有高数相关的代码。
下面说下正确的方法:

5.png
看颜色,平均分布在画板上,说明我们得到的数据平均分布。

代码原理也是将数值分段然后将数据后移一位,然后加权。这样避免了相加或相乘得到排列组合概率问题。
这种办法相对效率较高

还有一种办法是将大数据分段然后取随机数然后转换成文本相加然后再转换为数值,这样也是可以的,但是效率比较低,不推荐。
好,时间有限。有时间的话大家可以按照最前面代码做高斯图看下。

概率实验随机率必须均衡分布,否则数据最终影响很大

精易模块
文本_取随机范围数字 ()
错误更离谱,得到图像 如果自带的是误差,这个就是错误
证据如下:

1.png 2.png
颜色分布.7z (1.41 KB, 下载次数: 24)
正态统计.7z (42.09 KB, 下载次数: 23)

免费评分

参与人数 2吾爱币 +3 热心值 +1 收起 理由
Lyoko + 1 + 1 我很赞同!
qingqingzijin + 2 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

无瑕黑心肠 发表于 2020-3-10 16:42
列明 发表于 2020-2-20 17:25
這麽專業的麽?我一直都沒關注過這類問題。

自从认识易语言到现在就没关注过取随机数的问题,直到有一天看了你的帖子,原来易语言的问题不小。于是我去查阅了一下文档,发现易语言是调用c提供的rand函数生成的伪随机数,rand函数返回的范围值时0至32767之间,所以易语言里如果最小值与最大值的差值超过了32768,那么就会有问题。

所以,易语言中使用取随机数()有效的调用应该在0至32767区间,也就是取随机数(N, N+32767)
头像被屏蔽
加油 发表于 2020-2-8 23:02
zyh666 发表于 2020-2-8 23:03
 楼主| 缈淼 发表于 2020-2-8 23:03
加油 发表于 2020-2-8 23:02
好像易语言的随机数是固定的 没有随机可言

可以重新看下帖子,我又编辑了下
风之暇想 发表于 2020-2-8 23:07
楼主测测精易模块的
文本_取随机范围数字 ()
 楼主| 缈淼 发表于 2020-2-8 23:08
风之暇想 发表于 2020-2-8 23:07
楼主测测精易模块的
文本_取随机范围数字 ()

文本取数 效率太低
文中最后的办法
头像被屏蔽
加油 发表于 2020-2-8 23:13
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 缈淼 发表于 2020-2-8 23:25
风之暇想 发表于 2020-2-8 23:07
楼主测测精易模块的
文本_取随机范围数字 ()

精易的更垃圾,给你看拟合正态分布图,
 楼主| 缈淼 发表于 2020-2-8 23:29
加油 发表于 2020-2-8 23:13
c++ 的有这种问题吗

C++没有测试,不清楚
 楼主| 缈淼 发表于 2020-2-8 23:31
风之暇想 发表于 2020-2-8 23:07
楼主测测精易模块的
文本_取随机范围数字 ()

关于精易模块的相关测试已放到帖子中,结果是他的错误很离谱
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 18:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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