我对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的东西吗?
编辑
按照页面边“相关”位中的一些内容,确实有一种方法可以获得具有给定的下界和上界的随机数。
发布于 2011-02-09 13:59:02
我不知道RAND_MAX的保证是什么,但如果可能的话,最好避免它,因为在当今的应用程序中,它的运行速度非常快。得到一个统一的分布描述为这里。
我建议改用Boost.Random。梅森龙卷风生成器代表了速度、内存使用和质量之间的一个很好的权衡。
发布于 2011-02-09 13:59:43
使随机数尽可能均匀地分布在rand()中。
发布于 2012-12-15 08:10:40
在Embacadero C++ Builder中,stdlib.h中定义了两个变量:
/* Maximum value returned by "rand" function*/
#define RAND_MAX 0x7FFFU
/* Maximum value returned by "_lrand" function (also used by random() macro)*/
#define LRAND_MAX 0x7FFFFFFFUhttps://stackoverflow.com/questions/4945698
复制相似问题