C++ std::ranlux48_base 函数2025年3月24日 | 阅读 9 分钟 伪随机数生成器 (PRNG) 主要用于需要伪随机源的模拟、恐吓、加密和统计研究。C 标准库中有许多用于生成随机数的工具,所有这些工具都可以在 <random> 库中找到。这些工具实际上并非随机。它们是伪随机或确定性工具,可生成一系列看似随机的数字,但如果使用相同的起始 (种子) 值,则会再次生成相同的序列。 这种确定性行为是 PRNG 的固有特性——PRNG 接收一个称为“种子”的初始值,并应用数学公式来生成一系列数字。然而,它看起来是随机的。如果只有设计该序列的人和他们使用的种子是已知的,那么它是非常可预测的。这一特性使它们非常重要,尤其是在希望结果可重现的模拟和测试情况下。
什么是 std::ranlux48_basestd::ranlux48_base 是 C++ 标准库中可用的 PRNG 引擎之一,它的设计用于在生成随机数所需的计算时间量与产生的随机数的实际质量之间需要取得平衡的情况下使用。它属于 RANLUX 系列随机数生成器,该系列被认为可以生成高质量的随机序列,因为它们会拒绝一些由线性同余引擎或生成器产生的“非随机”数字。
std::ranlux48_base 的属性std::ranlux48_base 是一个线性同余生成器 (LCG),并使用 48 位状态执行其计算。它使用以下公式生成随机数:
std::ranlux48_base 的用例std::ranlux48_base 是 C++ 中的一个 PRNG,专为在性能和随机数质量之间的平衡至关重要但又很复杂的情况下设计。以下是一些 std::ranlux48_base 的常见用例:
为 std::ranlux48_base 中的引擎播种
这意味着每次执行程序并将种子值设置为 12345 时,引擎将产生完全相同的随机数序列。此属性在测试或调试应用程序时特别有用,因为它允许我们模拟代码中的确切条件和行为。 如果未提供种子,引擎将设置一个种子,大概是利用当前时间,这样如果再次运行程序,将产生不同的序列。如果您希望在程序运行时获得不同级别的随机性,但又不关心可靠性,这会很有帮助。 编码 输出 First 10 random numbers generated by std::ranlux48_base: 30624511805803 114996294343928 79930194652383 62531497946618 129771911128749 106231211407048 79885003037325 91355970505878 127270706838653 49703586973510 Random floating-point numbers in the range [0, 1): 0.6971 0.2864 0.5393 0.7613 0.8032 0.8181 0.4842 0.4142 0.5480 0.8320 Random integers in the range [0, 99]: 55 69 38 80 76 74 96 41 87 95 Simulating 10 dice rolls: 3 1 2 4 4 6 5 6 6 6 Original vector: 1 2 3 4 5 6 7 8 9 10 Shuffled vector: 10 3 5 7 1 8 4 6 9 2 Random sampling from a set of elements (choosing 5 from {0, 1, ..., 19}): 1 16 10 12 15 Demonstrating repeating sequences: First 10 random numbers from engine2 (same seed): 30624511805803 114996294343928 79930194652383 62531497946618 129771911128749 106231211407048 79885003037325 91355970505878 127270706838653 49703586973510 Next 5 numbers from Engine: 18762030123288 147186257781979 140059358354656 119221270255519 87628723186538 Next 5 numbers from engine2: 18762030123288 147186257781979 140059358354656 119221270255519 87628723186538 First 10 random numbers from engine3 (different seed): 133031433434303 7756433787978 39967638941832 189279895723317 167530702842012 76040823056437 71929229911424 10764313819113 23441916049750 37862276864627 结论总之,std::ranlux48_base 是 C++ 中一个不错的 PRNG 引擎选择,它在计算速度和随机性之间实现了相当好的比例。与许多其他引擎一样,它使用 48 位线性同余生成器 (LCG) 作为基础,这仍然是一个纯粹的确定性伪随机数生成器,即,当输入相同的种子值时,它会重复相同的数字序列。此属性使其适用于模拟环境开发、游戏开发和统计学等领域,在这些领域,速度和中等程度的随机性被认为很重要。 ranlux48_base 的关键特性是它比包括 std::ranlux48 在内的许多引擎更简单,同时能产生更好的结果。它不会从其系列中排除任何数字,因此速度更快,但随机性会略有牺牲。然而,对于不太敏感的应用,如果不需要实现特定目标,这种随机性水平通常就足够了。 播种在控制 std::ranlux48_base 的输出方面起着至关重要的作用,这使得重复模拟或测试成为可能。此外,通过设置种子,开发人员可以获得相同的随机数序列,这有助于调试并确保程序每次执行时都运行相同。 std::ranlux48_base 是一个快速而有用的选项,适用于所有需要平衡随机数生成速度和数字随机性的应用程序,这使得 ranlux48_base 成为 C++ 中随机数生成工具集合的有价值的补充。 |
C++20 引入了几个新功能,其中两个函数在管理对象生命周期方面起着至关重要的作用。这些是 start_lifetime_as 和 start_lifetime_as_array 的标准生命周期扩展。这些函数允许程序员在某些复杂条件下扩展对象生命周期,尤其是...
7 分钟阅读
在本文中,我们将讨论 Farey 序列、其数学性质以及如何使用 C++ 高效生成它。概述:一个重要的数学概念,在分数和数论中有应用,是 Farey 序列。Farey 序列是一个完全最小化的分数序列……
阅读 4 分钟
将 N 边形数列视为一场接力赛,其中每位跑步者将速度传递给 N 位跑步者,因此会发生连锁反应。斐波那契数列可以有趣地扩展到 N 边形数。两个项的和……
阅读 4 分钟
在本文中,我们将研究 C++ 算法,用于打印 Smarandache-Wellin 数列的前 m 项。但是,首先,我们需要了解 Smarandache-Wellin 数列。一系列 Smarandache-Wellin 数称为 Smarandache-Wellin 数列。被称为 Smarandache-Wellin 数的整数是通过连接...
阅读 6 分钟
在本文中,我们将讨论 C++ 中静态队列和单链表之间的区别。在讨论它们的区别之前,我们必须了解 C++ 中的静态队列和单链表及其函数和示例。什么是静态队列?静态队列是...
阅读 15 分钟
在本文中,我们将讨论在 C++ 中将向量转换为数组的各种方法。但在深入实现之前,我们必须了解 C++ 中的数组和向量。数组和向量都将元素存储在连续的内存位置中。在 C++ 中,...
阅读 3 分钟
当一个函数不返回任何值时,它被称为 void 函数。当函数的主要目的是执行某些操作或任务而不产生需要返回到调用代码的结果时,可以使用它。这些函数执行集合...
阅读 3 分钟
简介 汉明数是指其唯一素数因子是 2、3 和 5 的数字。该序列如下开始:1、2、3、4、5、6、8、9、10、12、15、16、18、20、24。该系列在计算机科学中也很有益,尤其是在优先级……
5 分钟阅读
在本文中,我们将讨论带有语法、返回值和示例。dlsym() 函数是什么?dlsym() 函数通过 dlopen() 调用获取由对象提供的符号地址。name 参数代表字符......
阅读 3 分钟
引言:C++ 中的 monad(源自 Haskell 等函数式编程语言)表示一种设计模式,它允许在管理值、上下文或副作用的同时,以受控的方式链接操作。在 C++ 中,monad 不是原生内置的,但可以通过...
7 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India