1

我正在尝试确定 RAND_MAX 是否可以放入 unsigned int 变量中。在查看了 C99 标准之后,我只发现 RAND_MAX 保证至少有 32767 的值。虽然我知道 RAND_MAX 扩展为 int 值,但我不确定它是否是一个 long int。现在我正在使用 unsigned long int 变量,但我想简化我的源代码以使用 unsigned int 变量。

总而言之,这个假设陈述是否适用于 C99 标准:

RAND_MAX <= UINT_MAX <= ULONG_MAX

此外,RAND_MAX 是否明确小于(即不等于)UINT_MAX 或 ULONG_MAX。我意识到 RAND_MAX 的值通常是梅森素数,但我不确定这是否是标准。

4

3 回答 3

13

RAND_MAX是可以返回的最大值rand()。既然rand()被定义为返回intRAND_MAX就不会超过INT_MAX,因此也就不会超过UINT_MAX

于 2012-11-07T16:20:49.107 回答
3

rand具有签名int rand(void);,因此它返回的任何非负值都必须适合unsigned int,因为 的非负范围int包含在 的范围内unsigned int

这没有明确说明RAND_MAX是 <= INT_MAX,但是要求rand返回范围0to的值RAND_MAX以及 32767 for 的下限RAND_MAX表示rand预期覆盖范围0to RAND_MAX,如果它大于则不会出现这种情况INT_MAX.

于 2012-11-07T16:21:10.337 回答
0

试试这个

我同意这个问题的回答者的观点,即 Mersenne Twister 将为您提供所需的所有控制和速度。它也是任何 C++ 程序的一个非常容易的补充。

但就像许多其他人所说的那样,rand() 的 int 返回类型实际上保证了 RAND_MAX 小于 UINT_MAX。

于 2012-11-07T16:20:21.697 回答