为什么宏的最小值:RAND_MAX,32767

时间:2014-02-10 15:58:39

标签: c++ macros

website表示宏RAND_MAX的值取决于库,最小值为32767.它没有进一步详述。

  1. 库依赖是什么意思?这是否意味着假设两个不同的库有两个宏RAND_MAX,我们必须通过使用不同的命名空间来区分它们?

  2. 为什么RAND_MAX 32767

  3. 的最小值

4 个答案:

答案 0 :(得分:4)

这意味着标准库有不同的实现,每个都允许以不同的方式定义RAND_MAX,但它必须始终至少为32767。

命名空间不参与,因为RAND_MAX是一个不在命名空间中的宏。在任何情况下,您通常一次只能链接一个标准库。它通常随编译器一起提供,您只需使用它。您可以从其他库中获得一些其他随机数生成器,但它通常应使用其他而不是RAND_MAX来指示它可以/将要创建的最大值。特别是,如果您的编译器包含它,您可能希望使用C ++的新“本机”随机数生成类(有关详细信息,请参阅<rand>的文档)。

32767是最小值,主要是因为它是INT_MAX的最小值。在16位实现(当编写C89标准时仍然很常见)是最大的有符号整数时,这些实现可以方便地工作。

答案 1 :(得分:1)

  

图书馆依赖是什么意思?

这意味着标准库的不同实现可以根据需要选择不同的值。较大的值将提供更高质量的伪随机性;但可能效率较低,特别是在开发C库时常用的蒸汽驱动处理器上。

  

这是否意味着假设两个不同的库中有两个宏RAND_MAX,我们必须使用不同的命名空间来区分它们?

您将只使用标准库的一个实现。如果你出于某种原因试图使用两个,那么你将遇到任何宏的麻烦,因为命名空间不能包含它们。

  

为什么RAND_MAX 32767的最小值?

这是一个相当随意的限制,旨在允许在16位处理器上实现高效(但低质量)。

答案 2 :(得分:0)

我猜这与存储在16位(签名短)有关。

答案 3 :(得分:0)

这仅仅意味着标准只要求RAND_MAX具有该最小值,我们可以从draft C99 standard中看到C ++标准对此情况的回归。在7.20.2.1 部分中,rand函数表示:

  

RAND_MAX宏的值至少应为32767。

至于为什么C99标准草案确保INT_MAX至少32767

有许多可用的标准C ++库libstdc++libc++是其中两个,并且每一个都可以为RAND_MAX提供不同的值,并且只要它符合标准至少是32767