首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机双C++11

随机双C++11
EN

Stack Overflow用户
提问于 2014-01-14 05:52:33
回答 4查看 5.4K关注 0票数 7

下面的代码显示了如何在C++11中随机加倍。每次在这个解决方案中,当我运行这个程序时,结果都是一样的-我不知道为什么?当我每次运行程序时,如何改变它以获得不同的解决方案?

代码语言:javascript
复制
#include <random>
int main(int argc, char **argv)
{
  double lower_bound = 0.;
  double upper_bound = 1.;
  std::uniform_real_distribution<double> unif(lower_bound, upper_bound);
  std::default_random_engine re;      
  double a_random_double = unif(re);
  cout << a_random_double << endl;
  return 0;
}
//compilation: "g++ -std=c++0x program_name.cpp -o program_name"
EN

回答 4

Stack Overflow用户

发布于 2014-01-14 05:54:05

在生成样本之前,您需要为随机数生成器设定种子。您可以在构造default_random_engine实例时执行此操作。例如:

代码语言:javascript
复制
std::random_device rd;
std::default_random_engine re(rd()); 

如果您希望对所使用的生成器有更多的规范,那么您应该指定一个生成器,而不是依赖于库实现者对default_random_engine的选择。下面列出了可用的选项:http://en.cppreference.com/w/cpp/numeric/random#Predefined_random_number_generators

还要注意,有些实现不使用random_device的非确定性源。如果您面临这样的实现,您将需要为您的种子找到一个替代源代码。

票数 7
EN

Stack Overflow用户

发布于 2014-01-14 06:32:22

您必须使用一些初始的种子值来初始化随机引擎。

一种选择是使用std::random_device.

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

int main() {
    const double lower_bound = 0;
    const double upper_bound = 1;
    std::uniform_real_distribution<double> unif(lower_bound, upper_bound);
    
    std::random_device rand_dev;          // Use random_device to get a random seed.

    std::mt19937 rand_engine(rand_dev()); // mt19937 is a good pseudo-random number 
                                          // generator.

    double x = unif(rand_engine);
    std::cout << x << std::endl;
}

你可能想在网上免费观看一个很棒的演示文稿:"rand() Considered Harmful“(来自GoingNative 2013 C++ event)。

票数 2
EN

Stack Overflow用户

发布于 2014-01-14 05:54:28

引擎未使用种子进行初始化。

代码语言:javascript
复制
#include <chrono>
...
std::default_random_engine re(std::chrono::system_clock::now().time_since_epoch().count());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21102105

复制
相关文章

相似问题

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