使用c++怎么实现简单随机数?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
c++简单随机数
#include<iostream> #include<ctime> #include<cstdlib> using namespace std; int random(int n) { return (long long)rand()*rand%n; } int main() { srand(unsigned(time(0))); // //求负数随机数,先产生0-2n之间的随机整数,再减去n就得到了-n - n 之间的数 }
实例扩展:
随机数引擎都需要一个种子,生成的都是伪随机数。
引擎适配器可以套一个随机数引擎:
discard_block_engine在连续若干个伪随机数中选择若干个;
independent_bits_engine把位数多的伪随机数压缩成位数少的;
shuffle_order_engine把连续若干个伪随机数重排。
套娃的方式是模板,理论上你还可以用适配器套适配器,不过CPU可能会有意见。
随机数引擎的模板参数怎么取?标准定义了一些数学家们发现的效果良好的随机数引擎:LCG minstd_rand0、minstd_rand、knuth_b;MT mt19937、mt19937_64;LFG ranlux24_base、ranlux48_base、ranlux24、ranlux48。如果你还是无从下手,那就用default_random_engine,编译器的开发者们为你选好了他们认为最合适的,在MSVC中是mt19937,在GCC中是minstd_rand0。
以上工具都生成伪随机数,标准还定义了真·随机数引擎random_device,尽管标准也允许它是伪随机的。如果它是真随机的,那么使用起来它的效果无疑是最好的,但是多次调用后性能会急剧下降,通常只用于生成伪随机数引擎的种子。
随机数生成器类型都定义了静态方法min和max,返回生成的随机数的范围,以及无参数的函数调用运算符operator(),返回随机数。
#include <iostream> #include <random> int main() { auto engine = std::default_random_engine(std::random_device()()); std::cout << "min = " << engine.min() << "; max = " << engine.max() << std::endl; std::cout << "random numbers: "; for (int i = 0; i != 10; ++i) std::cout << engine() << ' '; std::cout << std::endl; }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。