【问题标题】:Is RAND_MAX guranteed to be <= UINT_MAX?RAND_MAX 是否保证 <= UINT_MAX?
【发布时间】:2012-10-27 17:49:15
【问题描述】:

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

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

RAND_MAX

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

【问题讨论】:

    标签: c c99


    【解决方案1】:

    试试this

    我同意这个问题的回答者的观点,即 Mersenne Twister 将为您提供所需的所有控制和速度。它也很容易添加到任何 C++ 程序中。

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • @WhozCraig 整数常量表达式并不意味着该值适合int
      • 这个link 让我失望了,因为它似乎暗示系统可以实现一个 rand 函数,该函数返回无符号并具有 RAND_MAX 的文字无符号值。
      • @VilhelmGray:rand 总是返回int,我在该链接中没有看到其他暗示。尽管某些系统出于某种原因对RAND_MAX 使用无符号文字,但它们的值仍将是&lt;= INT_MAX
      • @WhozCraig ecatmur 反对“通过推断,INT_MAX 限制整数常量”。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        相关资源
        最近更新 更多