Как сгенерировать случайное число от 0,04 до 0,11 в C ++?

Если 5 + rand() % 6 генерирует случайное число от 5 до 10, как бы я сгенерировал десятичное число? Я попытался присвоить переменную с плавающей точкой ((4 + rand() % 8) / 100), но это ничего не делает, кроме как присвоить переменной ноль.

-3

Решение

Лично я бы пошел с чем-то более надежным, чем rand() (но это может быть потому, что я занимаюсь исследованиями в областях, где требуются высококачественные случайные числа):

#include <random>

double randomDouble(double bottom, double top) {
std::uniform_real_distribution<double> dist(bottom, top);
std::mt19937 gen; // Mersenne Twister PRNG

return dist(gen);
}

Эта маленькая функция использует Мерсенн Твистер, распространенный тип PRNG, у которого период (число случайных чисел перед повторением) равен 2 ^ 19937 — отсюда и название. Теперь просто назовите это так:

double foo = randomDouble(0.04, 0.11);
3

Другие решения

Есть два основных способа преобразования генератора чисел rand() который производит числа в [0, RAND_MAX] диапазон, чтобы заставить его производить числа в диапазоне [a, b]:

  1. n = rand() % (b - a + 1) + a;

  2. n = rand() * (b - a + 1) / (RAND_MAX + 1) + a;

Второй метод применим к диапазонам с нецелым числом a а также b,

Имейте в виду, что, помимо уже упомянутых проблем качества случайных чисел, этот генератор может не обеспечивать достаточно плотного охвата целевого диапазона. Чем больше значение RAND_MAXЧем плотнее покрытие.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector