【发布时间】:2011-06-24 03:51:08
【问题描述】:
我对 C++ 很感兴趣,但我怀疑它只是导入了 C 标准定义。我相信标准所说的答案是否定的,但我最感兴趣的是实践中的答案。
如果 RAND_MAX 始终为 (2^n)-1(其中 n 是某个自然数 - 实际上是随机数中随机二进制数字的数量),则可以简化处理最近从 MinGW 移动代码的问题GCC 到 Linux GCC。 RAND_MAX 似乎更大(我没有检查,但可能等于 INT_MAX 或任何符号),所以一些旧的天真编写的 RAND_MAX-isn't-big-enough-so-work-around-it 代码适得其反。现在我需要决定我需要这个库的通用性,考虑到编写正确处理溢出可能性的代码的复杂性,而不会对例如int 的宽度。
无论如何,是否有任何合理广泛使用的 C++ 编译器使用 (2^n)-1 以外的东西来表示 RAND_MAX?
另外,我是否更正了 ((RAND_MAX | (RAND_MAX >> 1)) == RAND_MAX) 对于某些无符号整数 n 始终且仅当 RAND_MAX 等于 ((2^n)-1) 时才为真。我相信 RAND_MAX 在技术上是一个 int,但是有一个负值或小数值是没有意义的,所以我认为我可以放心地忽略这些。摆弄比特通常不会打扰我,但我一直认为表达式看起来不对,我不知道为什么。
最后,虽然在找到自己的可行解决方案之前我不会感到高兴,但我应该将什么用于随机数而不是自己编写?我需要 0
有 Boost 或 C++0x 的东西吗?
编辑
按照页面侧面“相关”位中的内容显示,确实有一种方法可以在 boost 中获取具有给定下限和上限的随机数。
【问题讨论】:
-
对于我们这些对此问题感兴趣的人,您能否澄清/编辑 2^n - 1 中变量 n 的含义?