在 C++ 中生成随机双精度数

2025年3月25日 | 阅读 4 分钟

在本文中,我们将讨论如何在 C++ 中生成随机双精度浮点数。

在 C++ 中,头文件提供了许多随机数生成函数,可用于生成随机双精度浮点数。标准库中特别包含了充当种子生成器的 std::random_device 类,以及流行的 Mersenne Twister 伪随机数生成器 std::mt19937 类。Mersenne Twister 引擎因其长的周期和出色的随机数而备受推崇。

请注意,这些随机数并非真正随机,因为它们是使用可预测算法生成的。在许多实际应用中,通过使用高质量的伪随机数生成器和适当的种子生成过程,可以生成统计上接近真随机的数字序列。为了确保生成的随机数不呈现重复模式,请始终确保正确进行播种。

生成随机双精度浮点数的方法

生成随机双精度浮点数有几种方法,其中一些如下所列

  1. 使用 random() 函数
  2. 使用 uniform_real_distribution 和 default_random_engine。

使用 random() 函数

在 C++ 中,使用 random() 方法可以在给定范围(通常是 0 到 RAND_MAX)内获取随机数。可以通过对这些整数进行缩放和移位操作来生成随机双精度浮点数。对于预期的双精度浮点数范围,这些过程包括设置下限和上限。通过将随机整数缩放到适合此范围,可以确保生成的双精度浮点数落在给定约束范围内。

示例

输出

The random double number is: 512.058

随机双精度浮点数的范围是 lower_limit (0)upper_limit (1000)。为了保证每次程序执行的随机数序列都是唯一的,srandom() 方法使用当前时间作为种子来初始化随机数生成器。主函数中的 random() 方法生成一个 0 到 max_limit (1000000) 之间的伪随机整数,然后将其移位和缩放以适应给定的双精度范围。经过缩放和移位的整数被转换为双精度浮点数,并存储在 random_double 变量中。最后,在控制台打印一条适当的消息和随机生成的双精度浮点数。

使用 uniform_real_distribution 和 default_random_engine

一旦定义了上限和下限,就可以使用这种方法来查找随机数。

  1. uniform_real_distribution: 这个类模板表示一个在特定范围内连续均匀分布的实数。它需要两个参数,即分布的下限和上限。与 random_engine(例如 default_random_engine)结合使用时,它会在给定范围内均匀地生成随机双精度浮点数。
  2. default_random_engine: 这个类模板通过充当随机数引擎来生成一系列随机值。通常,它使用 Mersenne Twister 算法,这是一种流行且高质量的伪随机数生成器。default_random_engine 的实例使用种子值进行初始化,该种子值决定了随机数序列的起始点。
  • min(): 返回运算符 () 指定的最小值。
  • max(): 返回运算符 () 指定的最大值。
  • operator(): 返回一个新的随机数。

示例

输出

The random double number between the 0 and 1000 is: 375.641

说明

在此示例中,随机双精度浮点数的范围由 lower_limit 设置为 0.0,upper_limit 设置为 1000.0。std::random_device 用于生成随机数生成器的种子,而 std::default_random_engine 在初始化期间用作随机数引擎。通过创建 std::uniform_real_distribution 来指定随机双精度浮点数的范围。使用分布和引擎创建随机双精度浮点数,并将其存储在 random_double 变量中。

最后,在控制台打印一条描述范围的适当消息以及随机生成的双精度浮点数。