@Nanami1

Функция srand в диапазоне > 100 000?

Можно ли функцией srand на с++ выбрать диапазон псевдорандомных чисел от 1 до 100 000?
Или может есть какая-то другая функция, но с тем же требованием: заполнить массив псевдорандомными элементами в диапазоне от 0 до 100 000?
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos
Функция srand вообще ничего не генерирует. Генерирует rand. Диапазон легко расширить:
cppstudio.com/post/834
Ответ написан
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Нужно объединить биты нескольких случайных значений сгенерированных rand, так чтобы получилось число, в котором столько значащих битов, сколько в верхней границе диапазона. А потом оставлять только значения входящие в диапазон, остальные откидывать и генерировать снова. Например:
#include <inttypes.h>
#include <stdlib.h>

static int width(uint64_t v)
{
    int i;

    for (i = 0; v; ++i)
        v >>= 1;
    return i;
}

uint64_t big_rand(uint64_t low, uint64_t high)
{
    uint64_t d = high - low;
    int rn;
    int n;

    assert(low < high);
    rn = width(RAND_MAX);
    n = width(d);
    for (;;) {
        uint64_t v = 0;
        int i;

        for (i = 0; i < n; i += rn) {
            v |= rand() << i;
        }
        if (i != n) {
            v &= ~(((UINT64_C(1) << (i - n)) - 1) << n);
        }
        if (v <= d) {
            return v + low;
        }
    }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы