首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有均匀分布数量级的PHP随机整数

具有均匀分布数量级的PHP随机整数
EN

Stack Overflow用户
提问于 2017-10-01 04:33:11
回答 1查看 210关注 0票数 2

PHP rand(min, max)在1到9999之间给出了几乎所有4位数字的结果(因为有大约90%的数字有4位数字)。所以,如果我运行了1000次,其中大约90%可能有4位数。

是否有一种方法可以生成从1到9999的随机整数,并且输出数有相同的机会拥有1、2、3或4位数字而无需手动操作?

通过手工操作,我的意思是这样:

代码语言:javascript
复制
$digits = rand(1, 4);
$num = '';

for($i = 0; $i < $digits; $i++){
    $num .= rand(0, 9);
}

$final = intval($num);
EN

Stack Overflow用户

回答已采纳

发布于 2017-10-01 04:45:14

所以,如果我运行了1000次,其中大约90%可能有4位数。

这正是均匀分布的工作方式。没有开箱即用的函数来做你想要做的事情,所以你必须使一些统计变魔术。

我想的是:生成一个0到1之间的随机数。如果它在0和.25之间,生成另一个0到9之间的随机数。如果它在.25和.5之间,生成另一个10到99之间的随机数,以此类推。那么,你就有1/4的机会得到每一个数量级。

不过,这显然会偏向较低的数字,因为数量较少。例如,1有一个25% / 10 = 2.5%机会,而1001有一个25% / 8998 = 0.00277%机会。

会是这样的:

代码语言:javascript
复制
<?php
$initial = rand(0, 100)/100;
if ($initial < .25) {
    $random = rand(0, 9);
}
elseif ($initial < .5) {
    $random = rand(10, 99);
}
elseif ($initial < .75) {
    $random = rand(100, 999);
}
elseif ($initial >= .75) {
    $random = rand(1000, 9999);
}
var_dump($random);

演示

票数 4
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46509243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档