【问题标题】:PHP Random Number with specific range and near to a specific number具有特定范围且接近特定数字的 PHP 随机数
【发布时间】:2014-02-01 12:56:59
【问题描述】:

据你所知,PHP 有一个随机函数,每个人都可以使用它。

<?php  rand(min,max);   ?>

现在我的问题是如何将重力定义为特定数字?

例如,rand(0,100) 返回最小值和最大值之间的真正随机数,并且无法预见将选择什么数字,我在 10 个循环中使用 rand,结果是:

28,41,2,94,65,23,47,97,59,69,32

现在我想要一个接近特定数字的 rand 数字,例如 rand(0,20)。接近 10,例如 4 个数字长度的愤怒。

1,6,12,15,7,8,20,12,10,9,20

如您所见,大多数数字都接近 10,但也有 1 甚至 20。

我不知道用以下标准编写一个随机函数:

1- 必须接近什么数字? 10

2- 附近的范围是多少? 4

3- 这个数字有多少百分比接近特定数字? 70%

【问题讨论】:

  • 那么就不是随机数了...
  • @Barmar 我已经读过它,但我不太了解他的想法。并没有涵盖我所有的问题。对 PHP 来说也不实用。
  • @user1844933 是的,它仍然是随机数,因为没有太多可预测性,但可以说是引导随机数。
  • @user1844933 它是随机的,但它具有正态分布而不是线性分布。

标签: php


【解决方案1】:

您想创建一个normal random variable。以下函数使用Marsaglia polar method 创建一个变量:

 function rand_polar($m = 0.0, $s = 1.0){
       do {
             $x = (float)mt_rand()/(float)mt_getrandmax();
             $y = (float)mt_rand()/(float)mt_getrandmax();

             $q = pow((2 * $x - 1), 2) + pow((2 * $y - 1), 2);
       }
       while ($q > 1);

       $p = sqrt((-2 * log($q))/$q);

       $y = ((2 * $y - 1) * $p);
       $x = ((2 * $x - 1) * $p);

       return $y * $s + $m;
 }

用法:rand_polar(MEAN, STANDARD_VARIANCE),在您的情况下为 rand_polar(10, 4)

有边界:

function rand_polar($m = 0.0, $s = 1.0, $min = 0, $max = 20){
    do {
        do {
            $x = (float)mt_rand()/(float)mt_getrandmax();
            $y = (float)mt_rand()/(float)mt_getrandmax();

            $q = pow((2 * $x - 1), 2) + pow((2 * $y - 1), 2);
        }
        while ($q > 1);

        $p = sqrt((-2 * log($q))/$q);

        $y = ((2 * $y - 1) * $p);
        $x = ((2 * $x - 1) * $p);
        $rand = $y * $s + $m;
    }
    while($rand > $max || $rand < $min);
    return $rand;
}

用法:rand_polar(10, 4, 0, 20)

【讨论】:

  • 既然他也希望结果有界,你应该加上$min和$max参数。
  • 文末的标准中没有说明,所以我不确定。
  • 他说“rand(0, 20)。接近 10”。如果他不想要这些界限,他为什么要给出这些界限?
  • @Reeno 是的,我仍然需要它的最小值和最大值
  • 我包含了第二个带边界的函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-13
  • 2014-07-29
  • 1970-01-01
  • 2015-10-28
  • 2016-05-04
相关资源
最近更新 更多