📌  相关文章
📜  c++ uniform_real_distribution 得到相同的结果 - C++ (1)

📅  最后修改于: 2023-12-03 14:39:53.544000             🧑  作者: Mango

C++中使用uniform_real_distribution生成相同的结果

在C++中,uniform_real_distribution是一个用于生成均匀分布随机数的类。如果您需要在多个设备或环境中获取相同的随机数序列,那么需要确保在所有设备上使用相同的生成器和分布参数。在本文中,我们将为您演示如何使uniform_real_distribution生成相同的随机数序列。

步骤

以下是在C++中使用uniform_real_distribution生成相同随机数序列的步骤:

1. 包含所需的标准头文件

#include <iostream>
#include <random>
#include <chrono>

2. 初始化随机数生成器

在C++中,我们使用伪随机数生成器(PRNG)生成随机数。为了初始化PRNG,我们需要一个种子。我们可以使用std::chrono头文件中的system_clock类获取当前时间戳,并将其作为种子。

unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator(seed);

3. 创建均匀分布

double lower_bound = 0.0;
double upper_bound = 10.0;
std::uniform_real_distribution<double> distribution(lower_bound, upper_bound);

上述代码将创建一个均匀分布对象,分布范围在[0.0, 10.0]之间。

4. 生成随机数

std::cout << "Generating random numbers: ";
for(int i = 0; i < 10; i++) {
    std::cout << distribution(generator) << " ";
}
std::cout << std::endl;

5. 复制代码到其他环境

将完整的代码复制到其他环境中。确保在所有设备上使用相同的代码和相同的生成器和分布参数,以便生成相同的随机数序列。

完整示例代码

以下是在C++中使用uniform_real_distribution生成相同的随机数序列的完整代码示例:

#include <iostream>
#include <random>
#include <chrono>

int main() {
    // 初始化随机数生成器
    unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
    std::default_random_engine generator(seed);
    
    // 创建均匀分布
    double lower_bound = 0.0;
    double upper_bound = 10.0;
    std::uniform_real_distribution<double> distribution(lower_bound, upper_bound);
    
    // 生成随机数
    std::cout << "Generating random numbers: ";
    for(int i = 0; i < 10; i++) {
        std::cout << distribution(generator) << " ";
    }
    std::cout << std::endl;

    return 0;
}

注意:确保在所有设备上使用相同的代码和相同的生成器和分布参数,以生成相同的随机数序列。