c++ - 即使使用 srand(time(NULL)) 也没有得到随机值
问题描述
即使在srand(time(NULL))
我的函数开头包含之后,(函数只在 main 中调用一次)我r1
每次运行程序时都会得到相同的随机值。r2
并r3
得到很好的随机值,但我需要随机的十进制值0.1
,10.0
所以包含的行有什么问题r1
?
void randNums(float &r1, float &r2, float &r3) {
srand(time(NULL));
r1 = (10 * (rand())/ (float)RAND_MAX);
r2 = 1 + (rand() % 10);
r3 = 1 + (rand() % 10);
}
解决方案
我刚刚删除了 srand 行并使用该函数将其打印了几次,它生成了随机数。当我使用您的代码生成随机数时,无论我运行多少次,它显然都为 r1、r2 和 r3 显示了相同的 3 个随机数值。我认为 Mooing Duck 说的是真的。这可能是因为 10 * rand() 代码溢出。唯一的缺点是,如果您要重新运行代码,它将生成与上次会话相同的随机数。
推荐阅读
- pandas - 重新采样和插值 pandas df
- makefile - 安装时说未设置 CUDADIR 环境变量
- python - Python:将初始numpy数组分配给另一个变量,更改新变量的几个元素会更改初始numpy数组
- algorithm - 分配最佳卫生间的算法
- python - 如何在python中附加到列表时格式化字符串和小数
- javascript - react-loadable 已加载块但未执行代码
- matlab - 如何在 MATLAB 中求解 ODE?
- android - 保存和加载 RadioGroup 的正确方法
- npm - 无法从 webpack 3 升级到 3.12.0
- vba - VBA将文本框条目转换为整数