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

What is the bankend program of rand() method in cpp

本文关键字:bankend 程序 是什么 方法 rand cpp      更新时间:2023-10-16

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

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

srand( time(NULL ) ); // second good enough

然后有一些数学像这样。

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

选择数字和偏移量,因此涵盖了'无符号 int 的整个范围。 这通常意味着某种形式的质数。

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

如果未调用srand,则 seed 具有初始值,这意味着(忽略线程计时问题(,程序每次运行时都会获得相同的结果。

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

rand不涉及"后端"。

顺便说一句,C++您最好使用标准<random>标头和相关实用程序,它们位于C++标准库中。

rand函数是 C 标准库的一部分。它与C++载体无关。

它们(rand函数和<random>的实用程序(都基于伪随机数生成器,这是一个相当复杂的领域。您仍然可以通过发明更好的PRNG来获得博士学位。

如果你想了解rand是如何实现(或可以(实现的,你最好研究一些现有的自由软件C标准库的源代码(例如GNU glibc或musl-libc(。

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