Мне нужно сгенерировать случайное число между 1 и n, где n - без знака int. Если n было int, я бы просто написал 1 + rand()% n
. Но, к сожалению, n является неподписанным int. Что ты предлагаешь?генерация случайных чисел в C++
ответ
rand() следует избегать по возможности *. Использование http://en.cppreference.com/w/cpp/numeric/random
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 engine(rd());
std::uniform_int_distribution<unsigned> dist(1, 77);
for (int i = 0; i != 5; ++i)
std::cout << dist(engine) << '\n';
}
* Потому что он разделяет глобальное состояние, получает часто реализуется в виде линейный конгруэнтный двигателя, который имеет несколько недостатков, и это диапазон часто только 0-2^16. Кроме того,% n, где n не является точным кратным диапазону , не дает равномерного распределения.
Edit: Это может показаться излишним, но технически один хотел бы что-то вроде этого, так как mt19937 нужно немного «разогреть»:
std::mt19937 create_seeded_rng()
{
std::random_device rd;
std::array<std::mt19937::result_type, std::mt19937::state_size> seed_data;
std::generate(seed_data.begin(), seed_data.end(), std::ref(rd));
std::seed_seq seq(seed_data.begin(), seed_data.end());
return std::mt19937(seq);
}
int main()
{
std::mt19937 rng = create_seeded_rng();
std::uniform_int_distribution<int> dist(0, 100);
for (unsigned i = 0; i != 100; ++i)
std::cout << dist(rng) << '\n';
}
Благодарим вас за ответ. Могу я попросить вас еще раз? Моя первоначальная проблема заключалась в том, чтобы написать функцию, которая заполняла массив случайными числами в случайном порядке. Итак, что я сделал, это – Igor
#include
@Igor Почему вы хотите заполнить его в произвольном порядке? Это действительно требование, потому что это не имеет смысла для меня. – cooky451
- 1. Генерация случайных чисел в C
- 2. Генерация случайных чисел
- 3. Генерация случайных чисел биномиальных чисел
- 4. Генерация случайных чисел
- 5. Генерация «в зоне» случайных чисел в C
- 6. Генерация случайных чисел android
- 7. Генерация геометрических случайных чисел
- 8. Генерация случайных чисел Java
- 9. Генерация случайных чисел
- 10. Генерация случайных чисел Haskell
- 11. Генерация параллельных случайных чисел
- 12. Генерация больших случайных чисел
- 13. Генерация случайных чисел ATMega
- 14. Генерация случайных чисел
- 15. Генерация случайных чисел F #
- 16. Spark - Генерация случайных чисел
- 17. Генерация случайных чисел Lua
- 18. Генерация случайных чисел Omnet ++
- 19. Генерация кода случайных чисел
- 20. Генерация случайных чисел Php
- 21. Генерация случайных чисел
- 22. Генерация случайных чисел в C vs Java
- 23. генерация целочисленных случайных чисел в C#
- 24. Генерация случайных чисел в Objective-C
- 25. Генерация случайных чисел в R
- 26. Генерация случайных чисел в python
- 27. Генерация случайных чисел в Excel
- 28. Генерация случайных чисел в диапазоне
- 29. Генерация случайных чисел в R
- 30. Генерация случайных чисел в Java
Почему это имеет значение, если 'n' это беззнаковое целочисленное значение? В C++ 11 есть намного лучшие способы генерации случайных чисел. – Mahesh
Попробуйте '1 + rand()% n'. –
Смотреть rand() С учетом вреда: http://channel9.msdn.com/Events/GoingNative/2013/rand-Considered-Harmful – knivil