Если вам нужно портативное решение, которое не зависит от стандартной библиотеки C ++, а также является более быстрым и, возможно, более простым для понимания, вы можете использовать следующий фрагмент. Переменная random_sequence
- это предварительно сгенерированный массив случайных чисел, где 0 встречается в 10% случаев. Переменные runs
и len
используются для индексации в этом массиве как бесконечная последовательность. Это, однако, простое решение, так как шаблон будет повторяться после 90 прогонов. Но если вас не волнует повторение паттерна, тогда этот метод будет работать нормально.
int runs = 0;
int len = 90; //The length of the random sequence.
int random_sequence[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
int coefficient = random_sequence[runs % len];
runs++;
Тогда, какую бы переменную вы не хотели видеть равной 0 10% времени, вы делаете это так:
float b = coefficient * rand();
или
float c = coefficient * rand();
Если вы хотите, чтобы обе переменные составляли 0 10% времени по отдельности, то это выглядит так:
float b = coefficient * rand();
coefficient = random_sequence[runs % len];
float c = coefficient * rand();
И если вы хотите, чтобы онибыть 0 10% времени вместе, тогда массив random_sequence
должен быть таким:
int len = 80;
int random_sequence[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
И использовать
float b = coefficient * rand();
float c = coefficient * rand();