Beispiel #1
0
/**
 * @param float      $range_start - Начало диапазона
 * @param float      $range_end - Конец диапазона
 * @param bool|int  $round - До скольки знаков округлять результат. False - не округлять, True - округлять до целого, 1 - округлять до десятков, 2 - до сотен итд
 * @param int        $strict - В сколько сигм надо уложить результат
 * @param bool|false $cut_extreme - надо ли обрезать крайние значения. Например, при $strict = 2 их слишком много
 *
 * @return float|int
 */
function sn_rand_gauss_range($range_start, $range_end, $round = true, $strict = 4, $cut_extreme = false)
{
    if ($cut_extreme) {
        $range_start--;
        $range_end++;
    }
    do {
        $random = sn_rand_gauss(($range_start + $range_end) / 2, ($range_end - $range_start) / $strict / 2, $strict);
        $round_emul = pow(10, $round === true ? 0 : $round);
        $result = $round ? round($random * $round_emul) / $round_emul : $random;
    } while ($cut_extreme && ($result == $range_start || $result == $range_end));
    return $result;
}
Beispiel #2
0
function sn_rand_gauss_range($range_start, $range_end, $round = true, $strict = 4)
{
    $random = sn_rand_gauss(($range_start + $range_end) / 2, ($range_end - $range_start) / $strict / 2, $strict);
    $round_emul = pow(10, $round === true ? 0 : $round);
    return $round ? round($random * $round_emul) / $round_emul : $random;
}