您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

为什么PHP生成的随机数分布极不均匀?

2025/6/9 12:10:21发布10次查看
php生成随机数时,如果区间上限太大,生成出来的随机数都是非常大的数,这是为什么呢?
测试代码:
10457165676412928 [32] => 2516742 [16] => 786840 [39] => 2142457578485972992 [81] => 16 [27] => 5472146880987136 [24] => 4979452 [6] => 24912932785618944 [48] => 930 [82] => 9223372036854775807)

很大的,很小的,都有。我已经有办法生成分布略均匀的随机数了,只是想请教一下大家,为什么php内置的随机数函数做不到这样。
附:我改良的mt_rand(0, php_int_max)

--- 题外话 ---
@沙渺 在解答问题的同时说:
所以用这么几个破数据就说“不均匀”,这是对数学的极大蔑视。非常希望提问者下次能够尊重科学,拿出可以按统计学解读的论据,而不是只凭一些粗浅的直观感觉说事,以免再出现常识性的笑话。
讨论技术问题嘛,人人都有认识不深的领域,即使再熟练,也会有一时想不清楚的时候。我用php多年,也在本站解答了很多问题,碰到这个问题,表面看起来与我的预期不符,努力改进和思考了,也想不通,我就来请教了。
同时我自己也做了几十次的验证,使用了google和stackoverflow,也想了办法得到我想要的数字位数更加均衡的随机数,说明我也是做了一些努力的,不是一碰到超级低级的问题就上来发贴坐等答案,更没有拿着不成熟的结论上来喷【php引擎做得不够好】。
想起个小故事:
- 三点水加个来读什么?- 不知道。- 还读lai呀!- 这样啊,认字认半边- 那三点水加个去读什么呢?- 读qu!- 读fa哦,亲- (拍大腿)哎呀!是的!读fa!我认识的!!!

我想多数人都有过这样的经历吧,也许是在技术上,也许是在生活上。
所以,谢谢大家帮我解答问题,也请大家不要因为我这个问题太生气,我这个人水平确实不高,平时也很浮躁,在这个问题上对概率的认识是很粗浅。但这次发贴子,态度还是比较端正的,说“破问题”、“蔑视”就太夸张啦,对我而言,这是一个好问题,困扰我几天的问题,我也没有蔑视数学和php引擎的主观意愿和本事。
回复内容: php生成随机数时,如果区间上限太大,生成出来的随机数都是非常大的数,这是为什么呢?
测试代码:
10457165676412928 [32] => 2516742 [16] => 786840 [39] => 2142457578485972992 [81] => 16 [27] => 5472146880987136 [24] => 4979452 [6] => 24912932785618944 [48] => 930 [82] => 9223372036854775807)

很大的,很小的,都有。我已经有办法生成分布略均匀的随机数了,只是想请教一下大家,为什么php内置的随机数函数做不到这样。
附:我改良的mt_rand(0, php_int_max)

--- 题外话 ---
@沙渺 在解答问题的同时说:
所以用这么几个破数据就说“不均匀”,这是对数学的极大蔑视。非常希望提问者下次能够尊重科学,拿出可以按统计学解读的论据,而不是只凭一些粗浅的直观感觉说事,以免再出现常识性的笑话。
讨论技术问题嘛,人人都有认识不深的领域,即使再熟练,也会有一时想不清楚的时候。我用php多年,也在本站解答了很多问题,碰到这个问题,表面看起来与我的预期不符,努力改进和思考了,也想不通,我就来请教了。
同时我自己也做了几十次的验证,使用了google和stackoverflow,也想了办法得到我想要的数字位数更加均衡的随机数,说明我也是做了一些努力的,不是一碰到超级低级的问题就上来发贴坐等答案,更没有拿着不成熟的结论上来喷【php引擎做得不够好】。
想起个小故事:
- 三点水加个来读什么?- 不知道。- 还读lai呀!- 这样啊,认字认半边- 那三点水加个去读什么呢?- 读qu!- 读fa哦,亲- (拍大腿)哎呀!是的!读fa!我认识的!!!

我想多数人都有过这样的经历吧,也许是在技术上,也许是在生活上。
所以,谢谢大家帮我解答问题,也请大家不要因为我这个问题太生气,我这个人水平确实不高,平时也很浮躁,在这个问题上对概率的认识是很粗浅。但这次发贴子,态度还是比较端正的,说“破问题”、“蔑视”就太夸张啦,对我而言,这是一个好问题,困扰我几天的问题,我也没有蔑视数学和php引擎的主观意愿和本事。
你的范围是19位的整数(大概是,不想深究了)。而你看到的“非常大”其实不过是“非常长”,占满了19位而已。
但所有(10^19-10^18) / 10^19 = 90%之多。
也就是说,如果要按照你所期待的那种“长短不一”的分布,只有概率向10%的一边严重倾斜才能做到。这反而是荒谬的。
统计,统计,只有数量非常大了才叫统计。要实际检验随机函数分布的均匀性,经验上要用10^7以上的数据量来跑,得出误差在5%之内都可以接受才行。
所以用这么几个破数据就说“不均匀”,这是对数学的极大蔑视。非常希望提问者下次能够尊重科学,拿出可以按统计学解读的论据,而不是只凭一些粗浅的直观感觉说事,以免再出现常识性的笑话。
第一,你的样本确实太小。 第二,程序中的随机数确实好像是伪随机数,随机到最后还是算法算出来的,无限趋向于随机数的伪随机数。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product