首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的随机()效率

C++中的随机()效率
EN

Stack Overflow用户
提问于 2015-01-31 18:52:38
回答 4查看 1.2K关注 0票数 0

我正在编写函数,需要找到1-10之间的随机数。最简单的方法之一是使用随机() libc调用。我要经常使用这个函数。但我不知道它的效率有多高。如果有人对随机()的效率有想法,那会有帮助吗?

我还注意到,随机()在2次运行中给出了相同的模式。

代码语言:javascript
复制
int main()
{
   for(int i=0;i<10;i++)
   {
    cout << random() % 10 << endl;     
   }
}

第一次输出:- 3 6 7 5 3 5 6 2 9 1

第二次我也得到了同样的输出。

那怎么会是随机的?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-31 19:14:04

其他人解释了为什么每次都是相同的序列,但这就是用C++生成随机数的方法

代码语言:javascript
复制
#include <random>

int main() {
    std::random_device rd{}; //(hopefully) truly random device
    std::mt19937 engine{rd()}; //seed a pseudo rng with random_device
    std::uniform_int_distribution<int> d(1,10); //1 to 10, inclusive
    int RandNum = d(engine); //generate
    return 0;
}

http://en.cppreference.com/w/cpp/numeric/random

票数 6
EN

Stack Overflow用户

发布于 2015-01-31 19:51:02

当然,实际的执行时间取决于您的平台,但是它几乎是直接的,是乘法和除法或移位的耦合:

What common algorithms are used for C's rand()?

我觉得你不应该担心。如果你需要大量的随机数,那么另一个随机源可能是一个更好的选择。

如果您正在寻找调整,那么将结果从rand()分割到单个数字以获得每个调用的几个结果如何?

票数 2
EN

Stack Overflow用户

发布于 2015-01-31 22:15:00

这种方法非常简单有效,只需设置种子:

代码语言:javascript
复制
#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

int main(){
    srand(time(NULL));
    for(int i=0;i<10;i++)
        cout << rand() % 10 << endl;     
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28255262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档