c++ - C++:为什么我第一次调用 rand() 重复相同的数字,而第二次调用不是?
问题描述
在尝试生成0.0
和之间的随机数1.0
时,我的程序每次都生成几乎相同的“随机”数:
int main(){
srand(time(NULL));
double fraction = 1.0 / (RAND_MAX + 1.0);
int number = rand();
cout << "Random number: " << number * fraction << endl;
输出始终是0.698...
,没有失败。(或者至少在那个地区。)
我决定看看如果我在同一块内再次重复该过程会发生什么:
int main(){
srand(time(NULL));
double fraction = 1.0 / (RAND_MAX + 1.0);
int number = rand();
cout << "1st random number: " << number * fraction << endl;
int number2 = rand();
cout << "2nd random number: " << number2 * fraction << endl;
cout << "\n";
这是多次运行第二个块的输出:
MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700058
2nd random number: 0.870525
MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700066
2nd random number: 0.00206314
MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700073
2nd random number: 0.133601
MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700073
2nd random number: 0.133601
MacBook-Air-2:Worksheet2 Olly$ ./exercise5.out
1st random number: 0.700081
2nd random number: 0.265139
如您所见,第二个表现出似乎是随机的行为,而第一个则每次都保持几乎相同。
我怀疑这与我的计算机如何编译代码有关(可能没有正确安装某些东西),根据这个讨论:http ://www.cplusplus.com/forum/beginner/5131/ 。所链接的讨论实际上从未就如何避免编译器端行为中的这种跨机器差异得出结论。
问题:为什么“第一个随机数”始终表现出比“第二个随机数”少得多的波动?
解决方案
推荐阅读
- nuget - 在 VSTS 发布期间将 NuGet 包部署到文件夹位置
- python - TypeError:不支持解码str(将字节转换为str)
- javascript - JavaScript 正则表达式解析 Latex \frac
- iis - 在 IIS 上运行 ASP Core 时出错
- c# - 2.2.1.0 中的自动映射器映射异常
- azure - Azure 服务定义 vmsize
- javascript - JS Date seconds 在 c# 中给出不同的日期
- typescript - 将响应数据转换为包含地图的类
- bash - 跨操作系统命令行工具的数据存储?
- python - 两个表的行级比较