C++ cpp中rand()方法的bankend程序是什么

C++ cpp中rand()方法的bankend程序是什么,c++,C++,每当我们想从向量中选取一个随机数时,我们都会使用一种称为rand()的方法。我想知道它是如何从后端工作的 对于rand,没有任何涉及 中 该函数是函数的一部分。它与C++向量无关。 它们(rand函数和中的实用程序)都基于一个相当复杂的字段。你仍然可以通过发明更好的PRNG获得博士学位 如果您想了解rand是如何实现的(或可以实现的),您最好研究一些现有C标准库的源代码(例如GNU或) 如果您想了解 是如何实现的,请研究C++标准库的源代码。如果您使用编译器(例如,使用g++程序进行编译),它是

每当我们想从向量中选取一个随机数时,我们都会使用一种称为rand()的方法。我想知道它是如何从后端工作的

对于
rand
,没有任何涉及

中 该函数是函数的一部分。它与C++向量无关。 它们(rand函数和中的实用程序)都基于一个相当复杂的字段。你仍然可以通过发明更好的PRNG获得博士学位

如果您想了解
rand
是如何实现的(或可以实现的),您最好研究一些现有C标准库的源代码(例如GNU或)

如果您想了解<代码> <代码>是如何实现的,请研究C++标准库的源代码。如果您使用编译器(例如,使用

g++
程序进行编译),它是由编译器提供的。

不涉及
rand

中 该函数是函数的一部分。它与C++向量无关。 它们(rand函数和中的实用程序)都基于一个相当复杂的字段。你仍然可以通过发明更好的PRNG获得博士学位

如果您想了解
rand
是如何实现的(或可以实现的),您最好研究一些现有C标准库的源代码(例如GNU或)


如果您想了解<代码> <代码>是如何实现的,请研究C++标准库的源代码。如果您使用编译器(例如,使用

g++
程序编译),它是由编译器提供的。

rand有一个种子值-例如,将其设置为当前时间

srand( time(NULL ) ); // second good enough
还有一些数学,比如

 unsigned int seed; // set by srand
 unsigned int rand() {
    seed = seed * number + offset;
    return seed;
 }

选择了数字和偏移量,因此覆盖了“unsigned int”的整个范围。这通常意味着某种形式的素数

正如评论中提到的,这是一个非常复杂的领域

如果未调用
srand
,则seed有一个初始值,这意味着(忽略线程计时问题),您的程序将在每次运行时获得相同的结果


获得相同的结果对于重新运行测试很方便,但如果是游戏逻辑,则会出现问题。

兰德有一个种子值-例如,将其设置为当前时间

srand( time(NULL ) ); // second good enough
还有一些数学,比如

 unsigned int seed; // set by srand
 unsigned int rand() {
    seed = seed * number + offset;
    return seed;
 }

选择了数字和偏移量,因此覆盖了“unsigned int”的整个范围。这通常意味着某种形式的素数

正如评论中提到的,这是一个非常复杂的领域

如果未调用
srand
,则seed有一个初始值,这意味着(忽略线程计时问题),您的程序将在每次运行时获得相同的结果


获得相同的结果对于重新运行测试来说很方便,但是如果是游戏逻辑的话就有问题。

如果你想学习伪随机数生成的理论,你需要阅读大量的数学和统计数据。如果你只想看到一些生成伪随机数的示例函数,那么只要稍加搜索,就会有很多可用函数,包括一些开源的标准库。如果你想学习伪随机数生成的理论,你需要阅读大量的数学和统计数据。如果您只想看到一些生成伪随机数的示例函数,那么只要稍微搜索一下,就有很多可用函数,包括一些开源的标准库。“选择了数字和偏移量,因此涵盖了
无符号int
的整个范围”-False。整个范围为
0-UINT\u MAX
,但
rand()
仅需涵盖
0-rand\u MAX
。这可能低至32767。这(线性同余生成器)是
rand()
的一种可能实现。这是很常见的,但是C和C++都不需要这种方法,有些实现方式不同。“选择数字和偏移量,所以整个代码范围>未签名的INT/COME”被覆盖为“-false”。整个范围为
0-UINT\u MAX
,但
rand()
仅需涵盖
0-rand\u MAX
。这可能低至32767。这(线性同余生成器)是
rand()
的一种可能实现。这是非常常见的,但是C和C++都不需要这种方法,有些实现方式不同。