每当我们想从一个向量中选择一个随机数时,我们使用一个名为rand()的方法。我想知道它是如何从后端工作的。cpp的rand()方法的bankend程序是什么
回答
rand
没有涉及"back-end"。
顺便说一句,在C++中,您最好使用<random>
标准头文件和相关实用程序,它们位于C++ standard library中。
rand
功能是C standard library的一部分。它与C++向量无关。
它们(rand
函数和<random>
的实用程序)均基于pseudo-random number generators,这是一个相当复杂的字段。你仍然可以通过发明更好的PRNG获得博士学位。
如果你想了解如何rand
是(或可以)来实现,你会更好地研究一些现有的free software C标准库的源代码(如GNU例如或glibcmusl-libc)。
如果您想了解如何实现<random>
,请研究C++标准库的源代码。如果使用GCC编译器(例如使用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有一个初始值,这意味着(忽略线程计时问题),每次运行时,程序都会得到相同的结果。
获得相同的结果对于重新运行测试非常方便,但如果它是游戏逻辑,则会出现问题。
”选择数字和偏移量,所以'unsigned int'的整个范围都被覆盖“ - False。整个范围是'0-UINT_MAX',但'rand()'只需要覆盖'0-RAND_MAX'。这可能低至32767. – MSalters
这个(线性同余发生器)是'rand()'的一种可能的实现。这是很常见的,但C和C++都不需要这种方法,有些实现的做法是不同的。 –
- 1. 在C++中使用rand()函数的正确方法是什么?
- 2. cpp中assert.h的用法是什么?
- 3. 线程上的“detach()”是什么? CPP
- 4. 什么是SQL Server Rand函数算法?
- 5. CPP-方形空心 - 什么是错误?
- 6. 为什么rand()不是真的随机?
- 7. 什么是rand()的合适替代品?
- 8. 为什么此cpp程序失败?
- 9. 为什么rand(变量)暂停我的Shoes程序的执行?
- 10. 更好的解决方案我创建程序Rand(a,b)的方法使用过程Rand(0,1)
- 11. 什么算法是基于C语言的Rand()?
- 12. 为什么程序的主要方法是静态的?
- 13. 什么是Spring应用程序的最简单的main()方法?
- 14. 什么是从我的C#程序打印最好的方法?
- 15. 什么是创建计数的MySQL程序的正确方法?
- 16. S函数中的void **是什么.cpp
- 17. “:: function()”在cpp中的含义是什么?
- 18. 在静脉中调用应用程序CPP文件中的初始化方法是什么?
- 19. CPP/CLI程序集和CS/VB程序集有什么区别?
- 20. 为什么错误?语法Rand功能
- 21. RoR中应用程序设置的推荐方法是什么?
- 22. 将JavaScript添加到Tapestry应用程序的方法是什么?
- 23. 什么是创建移动应用程序的最佳方法
- 24. 部署WPF应用程序最简单的方法是什么?
- 25. 发布nodejs应用程序的正确方法是什么?
- 26. 什么是结束.Net应用程序的正确方法?
- 27. 实用程序类 - 什么是正确的方法?
- 28. 让vb.net程序读取列表的正确方法是什么?
- 29. 什么是打包企业应用程序的正确方法
- 30. 处理程序集版本的正确方法是什么?
如果你想了解关于伪随机数生成的理论,你需要阅读大量的数学和统计数据。如果您只想查看一些生成伪随机数的示例函数,那么如果您只是搜索一些,包括一些标准库是开源的,那么这里有很多可用的函数。 “ –