生成略高于或低于一个数字的非负随机值


Generate non-negative random value slightly above or below a number

我需要稍微打乱报告中的实数。这些值通常在0到1000之间,大多数是包含小数的小数,比例为2。

一些例子:

32.1
0.10
0.02
0.01

我把这个简单的函数放在一起稍微打乱值:

function tickle_int($v)
{
    $tickled = $v + (mt_rand(-40, 40) / 100);
    if ($tickled==$v)
    {
        $tickled = tickle_int($v);
    }
    return $tickled;
}

但是我发现返回值通常是负的。如果我将mt_rand的低值更改为0,我只会得到比原始值大的打乱值,从而减少随机性。

如何修改此函数以仅返回随机高于或低于传递输入的非负值?

编辑添加我需要避免0。打乱后的值必须非负且不为零。踢球者正通过。01。我需要一种方法将其随机化到0.009、0.02、0.011等值,同时继续显著随机化更大的值。

限制:

$tickled = $v + ( mt_rand( $v*(-1), 40) / 100 );

try this,

function tickle_int($v)
{
    $random = mt_rand(40, 80);
    $tickled = $v + (($random - 40) / 100);
    if ($tickled==$v)
    {
        $tickled = tickle_int($v);
    }
    print_r($tickled);
}

您必须将-40移到mt_rand之外:

function tickle_int($v, $w)
{
    $tickled = $v + (mt_rand(0, 2 * $w) - ($v >= $w? $w : $v)) / 100;
    if ($tickled==$v)
    {
        $tickled = tickle_int($v);
    }
    return $tickled;
}
tickle_int(0.5, 40);

如果您不太关心随机分布,那么您可以简单地执行

if ($tickled < 0)
{
    $tickled = 0;
}
return $tickled;

否则,需要修改传递给mt_rand的最小参数,使其依赖于$v