我正在尝试确定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,但我不确定这是否是标准。
答案 0 :(得分:13)
RAND_MAX
是rand()
可以返回的最大值。由于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
预计涵盖0
到RAND_MAX
的范围,如果它更大则不会是这种情况比INT_MAX
。
答案 2 :(得分:0)
尝试this。
我同意这个问题的回答者,Mersenne Twister将为您提供所需的所有控制和速度。它也是任何C ++程序的一个非常简单的补充。
但正如其他许多人所说,rand()的返回类型int实际上保证RAND_MAX小于UINT_MAX。