如何正确地生成一个随机数
生活随笔
收集整理的這篇文章主要介紹了
如何正确地生成一个随机数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
參考文章
筆記 | 如何正確地生成一個隨機數
CF曾提到:Don’t use rand(): a guide to random number generators in C++
文章總結:
1 .rand()的隨機范圍太小了,在某些平臺下(例如 Windows)RAND_MAX 只有 32768。如果需要的范圍大于 32768,那么指定 min 和 max 參數就可以生成大于 RAND_MAX 的數了,或者考慮用 mt_rand() 來替代它。
2. random_shuffle(打亂數組順序)
3. rand()使用的偽隨機算法是 linear congruential generator (線性同余發生器),在低位循環節很低
rand()不行那咋辦?文章中給了東西:mt19937(范圍:無限制,可以自己設定),mt19937是c++11中加入的新特性,具有速度快,周期長的特點
無范圍:
使用方法:
C++無范圍限制
#include <iostream> #include <chrono> #include <random> using namespace std; int main() {// 隨機數種子unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();mt19937 rand_num(seed); // 大隨機數cout << rand_num() << endl;return 0; }手動加上范圍:
#include <iostream> #include <chrono> #include <random> using namespace std; int main() {// 隨機數種子unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();mt19937 rand_num(seed); // 大隨機數uniform_int_distribution<long long> dist(0, 1000000000); // 給定范圍cout << dist(rand_num) << endl;return 0; }總結
以上是生活随笔為你收集整理的如何正确地生成一个随机数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CF1548A Web of Lies
- 下一篇: Ozon Tech Challenge