C++ std::subtract_with_carry_engine

17 Mar 2025 | 4 分钟阅读

在本文中,您将学习 C++ 中的 std::subtract_with_carry_engine 及其语法、参数和示例。

什么是 std::subtract_with_carry_engine?

C++ 模板类 std::subtract_with_carry_engine 实现了带进位减法的随机数引擎。该引擎在 <random> 头文件中定义,并包含在 C++ 标准库中。

语法

这是 std::subtract_with_carry_engine 类的模板简要摘要

  • UIntType: 将用于表示引擎内部状态的无符号整数类型。此类型必须满足 UniformRandomBitGenerator 的要求
  • w: 状态字中包含的位数。它确定内部状态的大小。
  • s: 减去的距离会影响进位的行为。
  • "r": 状态数组中的字数。

带进位减法引擎通过重复从两个内部状态字的和中减去一个进位项来生成伪随机数。由于它使用减法运算,因此该引擎是可逆的。

示例

使用 std::subtract_with_carry_engine 的示例如下

输出

std::subtract_with_carry_engine in C++

说明

  • 在此示例中,subtract_with_carry_engine 以 48 位、5 的减法距离、64 位无符号整数类型和状态数组中的十个字进行实例化。之后,引擎生成五个随机数。
  • 请记住,您提供的模板参数决定了引擎的特定功能。w、s 和 r 的值会影响生成序列的质量和持续时间。应根据特定用例对随机数生成器的期望特性来选择这些参数。

一些函数

std::subtract_with_carry_engine 的一些成员函数执行常见操作

序号。函数描述
1min()它用于确定可以产生的最小值。
2max()它用于确定可以产生的最大值。
3seed()生成随机数的过程使用种子。
4operator ()operator () 被重载以返回随机生成的数字。

示例 1

让我们举一个例子来说明 C++ 中的 std::subtract_with_carry_engine

输出

std::subtract_with_carry_engine in C++

示例 2

让我们再举一个例子来说明 C++ 中的 std::subtract_with_carry_engine

输出

std::subtract_with_carry_engine in C++

std::subtract_with_carry_engine 的优点

C++ 标准库提供了一个名为 std::subtract_with_carry_engine 的随机数引擎。它旨在通过带进位减法算法生成随机数,并且是 <random> 头文件的一个组件。以下是使用此引擎的一些优点

  1. 更高质量的随机数: 众所周知,带进位减法算法能生成更优质的随机数。鉴于其强大的统计特性,生成的数字更有可能均匀分布并显示其他期望的属性。
  2. 周期长度: 带进位减法引擎在开始重复序列之前可以生成的随机值的数量称为其周期长度,通常非常长。通常,对于某些应用程序来说,更长的持续时间被认为是优选的,以防止重复和可预测性。
  3. 可重现性: 可以设置和检索引擎的内部状态。这意味着使用特定种子将使您能够以可重复的方式生成随机数。在您需要相同的随机数序列进行测试或调试的应用程序中,这可能会很有帮助。
  4. 灵活性: C++ 库旨在兼具适应性和可扩展性。它为不同的生成器、分布和随机数引擎提供了标准接口。这使得在引擎或分布之间切换变得简单,而不会影响代码的整体组织。
  5. 跨平台的统一性: 使用 std::subtract_with_carry_engine 的代码可能具有更好的平台和编译器可移植性,因为它是 C++ 标准库的一个组件。这在开发跨平台应用程序时可能会很有益。

重要的是要记住,您使用的随机数生成器将由您的应用程序的特定要求决定。不同的算法在不同情况下可能效果更好,C++ 标准库提供的选项不仅仅是带进位减法引擎。根据您的需求,您可能还需要研究其他引擎,例如 std::linear_congruential_enginestd::mersenne_twister_engine