RAND_MAX是否保证为< = UINT_MAX?

时间:2012-11-07 16:13:07

标签: c c99

我正在尝试确定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的值通常是Mersenne prime,但我不确定这是否是标准。

3 个答案:

答案 0 :(得分:13)

RAND_MAXrand()可以返回的最大值。由于rand()被定义为返回int,因此RAND_MAX不会超过INT_MAX,因此也不会超过UINT_MAX

答案 1 :(得分:3)

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

这并没有明确说明INT_MAX是< = rand,但0要求RAND_MAX范围内的值返回{{1}与RAND_MAX的32767下限一起表示rand预计涵盖0RAND_MAX的范围,如果它更大则不会是这种情况比INT_MAX

答案 2 :(得分:0)

尝试this

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

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