此website表示宏RAND_MAX
的值取决于库,最小值为32767.它没有进一步详述。
库依赖是什么意思?这是否意味着假设两个不同的库有两个宏RAND_MAX
,我们必须通过使用不同的命名空间来区分它们?
为什么RAND_MAX
32767
答案 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
。