21xrx.com
2025-03-29 20:53:43 Saturday
文章检索 我的文章 写文章
用C++生成1000万个双精度随机数
2023-06-30 03:28:46 深夜i     13     0
C++ 双精度 随机数 生成 1000万

双精度随机数是指在计算机科学中,指由计算机生成的随机双精度数。在很多应用领域,随机数都是非常重要的一种工具。比如在模拟实验、加密解密、仿真模拟等领域,随机数都有广泛应用。

本文将介绍如何使用C++生成1000万个双精度随机数。首先,需要清楚地知道C++中生成随机数的方式。C++中有两种生成随机数的方法:rand()函数和C++11的新特性random。在此我们介绍使用C++11的新特性random。

C++11的新特性中提供了许多种生成随机数的方式,包括线性同余发生器、梅森旋转器、随机数引擎等等。其中比较简单易用的是随机数引擎,可以生成高质量的随机数序列。 使用随机数引擎需要三个步骤:设置随机数引擎、设置随机数分布和生成随机数。

设置随机数引擎的代码如下:

std::mt19937 rng;
rng.seed(std::random_device()());

其中`std::mt19937`是一个随机数引擎。`rng.seed()`是设置种子,这里我们使用`std::random_device`生成一个随机的种子。

设置随机数分布的代码如下:

std::uniform_real_distribution<double> dist(0.0, 1.0);

其中`std::uniform_real_distribution `是指生成一个实数分布,范围在0到1之间。

生成随机数的代码如下:

double random = dist(rng);

其中`dist(rng)`是生成一个随机数的函数,`rng`是我们设置的随机数引擎。

最后我们将以上的代码进行组合,得到生成1000万个双精度随机数的代码如下:

#include <iostream>
#include <random>
#include <vector>
int main()
{
  std::mt19937 rng;
  rng.seed(std::random_device()());
  std::uniform_real_distribution<double> dist(0.0, 1.0);
  std::vector<double> rand_vec;
  rand_vec.reserve(10000000);
  for (int i = 0; i < 10000000; ++i)
  {
    double random = dist(rng);
    rand_vec.emplace_back(random);
  }
  return 0;
}

以上代码用std::vector存储生成的随机数,最终我们可以得到1000万个双精度随机数。

在实际应用中,我们还可以对以上代码进行一些优化,比如使用多线程、GPU加速等方式,提升随机数生成效率。

  
  

评论区

请求出错了