首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RAND_MAX的值总是(2^n)-1吗?

RAND_MAX的值总是(2^n)-1吗?
EN

Stack Overflow用户
提问于 2011-02-09 13:48:06
回答 4查看 26.8K关注 0票数 11

我对C++感兴趣,尽管我怀疑它只是简单地导入了C标准定义。我相信标准上的答案是否定的,但我最感兴趣的是在实践中的答案。

如果RAND_MAX总是(2^n)-1 (其中n是一些自然数--实际上是随机数中的随机二进制数),则简化了处理最近出现的从MinGW GCC到Linux的代码的问题。RAND_MAX似乎更大(我没有检查,但可能等于INT_MAX或任何符号),所以一些老的天真地编写的RAND_MAX不是-大-足够的工作-所以工作-它的代码事与愿违。现在我需要决定我需要这个库有多普遍,考虑到编写代码的诡计性,它可以正确地处理溢出的可能性,而不需要假设int的宽度。

无论如何,是否有任何合理地使用广泛使用的C++编译器使用(2^n)-1以外的东西用于RAND_MAX?

另外,对于某些无符号整数n,(RAND_MAX x_( RAND_MAX >> 1)) == RAND_MAX)总是且只有当RAND_MAX等于(2^n)-1)时,才是正确的。我认为RAND_MAX在技术上是一个int,但是没有负值或小数值是没有意义的,所以我认为我可以安全地折现这些值。通常情况下,我并不会感到烦恼,但我一直认为这个说法看上去不对,而且我也不知道为什么。

最后,虽然在我有了自己的工作解决方案之前,我不会高兴,但我应该用什么来处理随机数,而不是自己写呢?我需要在0 <= x<参数范围内的随机数,而且我特别希望所有数字的概率都是相同的。例如,取(rand() %上界)会偏向较小的值,特别是当上限较大时--我想避免这一点。

有什么提振或C++0x的东西吗?

编辑

按照页面边“相关”位中的一些内容,确实有一种方法可以获得具有给定的下界和上界的随机数。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-09 13:59:02

我不知道RAND_MAX的保证是什么,但如果可能的话,最好避免它,因为在当今的应用程序中,它的运行速度非常快。得到一个统一的分布描述为这里

我建议改用Boost.Random梅森龙卷风生成器代表了速度、内存使用和质量之间的一个很好的权衡。

票数 4
EN

Stack Overflow用户

发布于 2011-02-09 13:59:43

  • 我不知道有任何RAND_MAX不少于2的幂的实现,但这不是标准所要求的;
  • ((RAND_MAX x (RAND_MAX >> 1)) == RAND_MAX)确实是一种测试RAND_MAX是否比2的幂小1的方法。
  • 我在用 int ( int ){ assert (0 maxUsefull);返回alea/partSize};

使随机数尽可能均匀地分布在rand()中。

票数 5
EN

Stack Overflow用户

发布于 2012-12-15 08:10:40

在Embacadero C++ Builder中,stdlib.h中定义了两个变量:

代码语言:javascript
运行
复制
/* Maximum value returned by "rand" function*/
#define RAND_MAX  0x7FFFU

/* Maximum value returned by "_lrand" function (also used by random() macro)*/
#define LRAND_MAX 0x7FFFFFFFU
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4945698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档