TS自带的随机函数为Math.random(),但是经过笔者测试,其随机性并不均匀。
比如我有个需求,从[0,3]中随机获得一个数字。
在CocosCreator中使用自带随机函数,代码如下:
let range = max - min;
let ranValue = min + Math.round(Math.random() * range);
在update中运行100次,统计获得的0,1,2,3的结果如下:

可见结果很不均匀。
升级版随机数解决方案
网上找到一份 线性同余随机数
已经集成到我的github中
同样的需求,使用该随机数方案,得到的结果如下:

补充:
9301, 49297, 233280这几个数字的来由 https://www.zhihu.com/question/22818104

本文对比了TS默认的Math.random()函数与线性同余随机数的均匀性,前者在[0,3]区间内随机数分布不均,而后者通过特定算法显著改善了这一问题。





