【发布时间】:2015-11-14 17:27:09
【问题描述】:
您好,我正在尝试创建一个函数,它会给我一个随机数,然后在我的类中将它作为一个受保护的 int 返回,该整数将被继承。 我想要的是创建一个随机数(0,1),然后将其传递给继承的类 GBM。在该课程中,我需要将其用于蒙特卡罗模拟。如何创建将被继承的随机数?
头文件
#pragma once
#include <iostream>
#include <random>
#include <chrono>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::default_random_engine;
using std::normal_distribution;
using std::vector;
class option
{
private:
float mean_ = 0.0;
float std_ = 1.0;
protected:
float rnum;
void RANDOM();
public:
option();
virtual float get_rnum() = 0;
virtual void simulation() = 0;
virtual ~option() {};
};
class GBM : public option
{
public:
GBM();
virtual float get_rnum();
virtual void simulation();
virtual ~GBM () {}
};
cpp文件
#include "Option.h"
void option::RANDOM()
{
const int N = 500000;
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator(seed);
std::normal_distribution<float> RAND(mean_, std_);
for (int i = 0; i <= N; i++)
{
rnum = RAND(generator);
}
}
option::option()
{
}
GBM::GBM()
{
}
float GBM::get_rnum()
{
float k;
k = rnum;
return (k);
}
【问题讨论】:
-
确保每次程序运行只播种一次。
-
避免使用
std::default_random_engine,它是实现定义的。明确地使用std::mt19937。 -
永远不要从当前时间获取种子。请改用
auto seed = std::random_device{}();。