我可以在每次使用后清除 default_random_engine 生成器吗?

Can I clear default_random_engine generator after each use?

1) 预处理器指令

#include <iostream>
#include <random>
#include <math.h>

2) 创建一个函数来生成给定范围内的随机值 a -> b

double RandomRealGenerator(double a, double b)
{
    std::default_random_engine generator;
    std::uniform_real_distribution<double> realDistribution(a, b);

    return realDistribution(generator);
}

3) 将上面生成的随机值作为元素创建矩阵的函数

double arrays()
{
    // Declare a 3x3 matrix
    double MatrixA[3][3];

    // Give random values to each element in MatrixA
    MatrixA[0][0] = RandomRealGenerator(0, 1);  // element 1,1
    MatrixA[0][1] = RandomRealGenerator(0, 1);  // element 1,2
    MatrixA[0][2] = RandomRealGenerator(0, 1);  // element 1,3
    MatrixA[1][0] = RandomRealGenerator(0, 1);  // element 2,1
    MatrixA[1][1] = RandomRealGenerator(0, 1);  // element 2,2
    MatrixA[1][2] = RandomRealGenerator(0, 1);  // element 2,3
    MatrixA[2][0] = RandomRealGenerator(0, 1);  // element 3,1
    MatrixA[2][1] = RandomRealGenerator(0, 1);  // element 3,2
    MatrixA[2][2] = RandomRealGenerator(0, 1);  // element 3,3

    std::cout << MatrixA[0][0] << "  " << MatrixA[0][1] << "  " << MatrixA[0][2] << std::endl;
    std::cout << MatrixA[1][0] << "  " << MatrixA[1][1] << "  " << MatrixA[1][2] << std::endl;
    std::cout << MatrixA[2][0] << "  " << MatrixA[2][1] << "  " << MatrixA[2][2] << std::endl;
    std::cout << "\nIt's still not generating random doubles\n";
}

4) 我不断得到一个所有元素都相同的矩阵

0.0850324  0.0850324  0.0850324
0.0850324  0.0850324  0.0850324
0.0850324  0.0850324  0.0850324

5) 我不是计算机科学专业的学生,​​我通常在 Python 工作,所以如果有一些简单的事情我严重忽视了,如果有人至少能指出我正确的方向,我将不胜感激.谢谢。

更新

6) 这行得通,但我仍然希望能够有一个快速的功能,我可以抓住它在我现在想要的任何范围之间生成一个随机数。我正在使用各种范围内的随机值来探索给定数学 space 内的计算解决方案。我这样做是为了收集有关某些字符串模型中自由参数的有效值的数据。再次感谢你的帮助。

// Declare a 3x3 matrix
double MatrixA[3][3];
std::default_random_engine generator;
std::uniform_real_distribution<double> realDistribution(0, 1);

// Give random values to each element in MatrixA
MatrixA[0][0] = realDistribution(generator);  // element 1,1
MatrixA[0][1] = realDistribution(generator);  // element 1,2
MatrixA[0][2] = realDistribution(generator);  // element 1,3
MatrixA[1][0] = realDistribution(generator);  // element 2,1
MatrixA[1][1] = realDistribution(generator);  // element 2,2
MatrixA[1][2] = realDistribution(generator);  // element 2,3
MatrixA[2][0] = realDistribution(generator);  // element 3,1
MatrixA[2][1] = realDistribution(generator);  // element 3,2
MatrixA[2][2] = realDistribution(generator);  // element 3,3

std::default_random_engine 是实现定义的。取决于 C++ 标准库:

  • default_random_engine 可能会在创建时为引擎设置固定值,也可能不会。
  • 如果未提供种子,
  • default_random_engine 可能会产生相同的数字序列,也可能不会。
  • default_random_engine 可能被定义为 C++ 标准引擎之一,也可能不是。

为了实现你想要的(生成一个范围内的随机实数),将一个 引擎,而不是分布,传递给一个用于此目的的函数(例如,RealGenerator(double, double, default_random_engine&)).