Случайные и отрицательные числа

Я должен генерировать числа в диапазоне[-100; +2000] в с ++. Как я могу сделать это с помощью rand, если доступны только положительные числа? Есть ли быстрые способы?

Ответы на вопрос(5)

но вы должны написать функцию, которая принимает два параметра:size а такжеoffset.

Таким образом, вы генерируете числа с заданнымsize в качестве максимального значения, а затем добавьте к нему (отрицательное) смещение.

Функция будет выглядеть так:

int GetRandom(int size, int offset = 0);

и будет вызван в вашем случае с:

int myValue = GetRandom(2100, -100);
Решение Вопроса

Быстрый поиск в Google обнаружилдостойно выглядящая статья об использовании Rand (). В конце статьи приведены примеры кода для работы с определенным диапазоном.

чтобы обеспечить лучшую поддержку со стандартной библиотекой.

http://www2.research.att.com/~bs/C++0xFAQ.html#std-random

Вот код

#include <cstdlib>
#include <ctime>

int main()
{
    srand((unsigned)time(0));
    int min = 999, max = -1;
    for( size_t i = 0; i < 100000; ++i )
    {
        int val = (rand()%2101)-100;
        if( val < min ) min = val;
        if( val > max ) max = val;
    }

}
 John Dibling30 сент. 2010 г., 18:08
@Cornelius, @Ben: кого это волнует? Это просто демо. Если бы я отправил только(rand()%2101)-100 что было бы лучше, чем скомпилируемый, запускаемый образец? Пожалуйста.
 Ben Voigt30 сент. 2010 г., 17:36
Также если случайноval было-100 каждый раз, в результатеmax было бы неправильно. То же самое для минимума.
 darklon30 сент. 2010 г., 15:49
Это не даст равномерного распределения! Кроме того, нахождение минимума и максимума в 100000 таких чисел не имеет отношения к вопросу.

в нужном распределении.

std::random_device rseed;
std::mt19937 rng(rseed());
std::uniform_int<int> dist(-100,2100);

std::cout << dist(rng) << '\n';
 MSalters01 окт. 2010 г., 10:28
Для тех, у кого нет TR1, boost :: random довольно близок.

Ваш ответ на вопрос