rand() x4000000000UL 只给出很小的值
rand() %4000000000UL giving only small values
本文关键字:x4000000000UL rand 更新时间:2023-10-16
我对以下代码有疑问:
#include <iostream>
#include <ctime>
int main(){
unsigned long int blob;
srand(time(0));
for(int counter = 0; counter <= 100; counter++) {
blob = rand() % 4000000000UL ;
std::cout << blob << std::endl;
}//for
system("pause");
return 0;
} //main
在 codepad.org 上,它输出较大的值,例如
378332591
1798482639
294846778
1727237195
62560192
1257661042
但在Windows 7 64位上,它只输出很小的值(在VS11和Code::Blocks上测试编译)
10989
13493
13169
18581
17972
29
提前感谢您帮助 c++ 学习者;)
rand() 只生成其RAND_MAX之前的数字。
根据MSDN,在Windows RAND_MAX上只有32767,或(2**15 - 1)(请注意,这是根据C标准允许的最小RAND_MAX(此处链接到基于C标准的开放组基本规范))。
如果你想要更大的数字,你需要调用它更多的次数和位移,例如:
long long int my_big_random = rand() ^ (rand() << 15) ^ ((long long int) rand() << 30);
(代码键盘上的示例)。
您遇到的行为是由于您正在测试的两个系统上的RAND_MAX
值造成的。
在 Windows 7 系统上,RAND_MAX
是 32767,该值明显小于运行代码的任何环境代码板。因此,随机生成的值在明显较小的范围内。
Windows 使用最大值为 32767 的随机数生成器。请参阅RAND_MAX的值。
您可以通过粘贴两个 rand() 调用的输出来创建更大的随机数。
big_rand = rand() << 15 | rand();
您也可以切换到不同的随机数生成器,例如 Boost.Random 或 C++11。
rand 的结果依赖于实现,并保证仅高达 32767:
http://en.cppreference.com/w/cpp/numeric/random/RAND_MAX
因此,当您使用不同的库实现在不同的系统上运行代码时,您可能会得到不同的结果 - Windows 只返回最多 32767 的数字,因此您可以从代码中获得少量数字。
相关文章:
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么新的随机库比std::rand()更好
- 为什么rand()的使用被认为是不好的
- C++使用 rand 定义函数语法
- 为什么 rand 不在我的代码中生成随机数?
- 为什么 CWE 认为 rand() 具有潜在危险
- 在 c++ 中,rand() 在执行有调试和不带调试的程序时生成不同的结果
- Rand() 没有显示随机数,请帮助我了解出了什么问题:)
- Rand()大小写开关在多次迭代后运行到无穷大
- rand()函数在特定问题中的工作
- 为什么 someNumber = rand() & 100 + 1;不产生错误?
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 如何生成比用户使用 rand() 函数输入的数字大 5-10% 的数字?
- rand()/RAND_MAX 函数每次打印 1
- 使用 rand() 和 srand() 有问题
- " rand()%3-1 " 在 C++ 中是什么意思?
- 如何使 rand() 更加随机?
- C++ 更深入地了解 rand() 和 srand() 内部
- 在 C++ 中向 rand() 添加模数会影响 for 循环之外的执行,为什么以及如何补救?
- rand() x4000000000UL 只给出很小的值