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

时间:2017-07-17 05:37:30

标签: c++

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

2 个答案:

答案 0 :(得分:1)

rand没有涉及"back-end"

BTW,在C ++中,您最好使用<random>中的C++ standard library标准标头和相关实用程序。

rand功能是C standard library的一部分。它与C ++向量无关。

他们(来自<random>rand函数和实用程序)都基于pseudo-random number generators,这是一个相当复杂的字段。你仍然可以通过发明更好的PRNG来获得博士学位。

如果您想了解rand是如何(或可以)实现的,您将更好地研究一些现有free software C标准库的源代码(例如GNU glibcmusl-libc)。

如果您想了解<random>的实现方式,请研究C ++标准库的源代码。如果您使用GCC编译器(例如使用g++程序进行编译),则由它提供。

答案 1 :(得分:1)

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,则种子具有初始值,这意味着(忽略线程计时问题),程序每次运行时都会得到相同的结果。

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