每当我们想从向量中选择一个随机数时,我们使用一个名为rand()的方法。我想从后端知道它是如何工作的。
答案 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 glibc或musl-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
,则种子具有初始值,这意味着(忽略线程计时问题),程序每次运行时都会得到相同的结果。
获得相同的结果对于重新运行测试很方便,但如果说是游戏逻辑则会有问题。