C++的rand()
C++ 中的随机数
rand() is not generated for thread-safet
rand() 不随机的问题
直接使用rand()
函数, 会返回一个在 [0, RAND_MAX] 区间的 伪随机整数
; 所以在两次相同的顺序调用中, 会出现重复的情况;
在调用rand之前, 需要使用 srand 设置接下来随机生成数的种子值;然后会获得我们看起来随机的一组数字;
随机数的计算是一系列复杂的计算机数学理论, 后面有时间会做进一步的探索
void main() // 两次运行的显示结果一致 { // sranc(time(NULL)) for(int i : 10) { cout << rand() << endl; } // 41 // 18467 // 6334 // 26500 // 19169 // 15724 // 11478 // 29358 // 26962 // 24464 }
rand() 使用的注意事项
rand()
并不能保证真正意义上的随机, 从上面的例子可以看出, 在大的范围内任然是遵循某个函数的定义. 所以 rand() 的很多实现, 生成的随机序列在随机性, 分布性, 周期性上都存在缺陷. 这个方法并不推荐在要求严谨的随机数的算法中使用, 比如密码学中;
POSIX要求rand使用的伪随机数生成器的周期至少为232, 并且提供了一个称为rand_r的线程安全版本,该版本已经过时,支持drand48系列函数。
分类:
夯实基础
, C++StandardLibrary
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具