Ответы пользователя по тегу Математика
  • Как понизить шанс выпадения числа?

    Arekus
    @Arekus
    // задаем вероятности выпадания числа в каждом промежутке. Суммарный prob должен быть равен 100
    $data = [
    	[
    		'start' => 0,	// начало промежутка
    		'end' => 7,		// окончание промежутка
    		'prob' => 20, 	// вероятность попадания, %
    	],
    	[
    		'start' => 8,	// начало промежутка
    		'end' => 15,	// окончание промежутка
    		'prob' => 80, 	// понижающий коээффициент на вероятность, %
    	]
    ];


    // вызываем функцию для получения произвольного числа с учетом вероятности попадания в промежуток
    function calcRand($data) {
    	$prob = rand(0, 100);
    	$pr = 0;
    	$out = 0;
    	foreach ($data as $info) {
    		if ($prob >= $pr && $prob < $pr + $info['prob']) {
    			$out = rand($info['start'], $info['end']);
    			break;
    		}
    		$pr += $info['prob'];
    	}
    	return $out;
    }


    // проверочный код для демонстрации распределения
    $numbers = [];
    for ($i = 0; $i < 10000; $i++) {
    	$number = calcRand($data);
    
    	$numbers[$number] = (isset($numbers[$number]) ? $numbers[$number] + 1 : 1);
    }
    ksort($numbers);
    
    echo '<pre>';
    var_export($numbers);
    var_export(array_map(function($a) { return round($a / 100); }, $numbers));
    Ответ написан
    Комментировать