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

Why is the minimum value of macro : RAND_MAX , 32767

本文关键字:MAX 32767 RAND 最小值 为什么      更新时间:2023-10-16

此网站声明宏RAND_MAX的值与库相关,最小值为32767。它没有进一步详细说明。

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

  2. 为什么RAND_MAX的最小值是32767

这意味着标准库有不同的实现,每个实现都可以不同地定义RAND_MAX,尽管它必须始终至少为32767。

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

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

依赖库意味着什么?

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

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

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

为什么RAND_MAX的最小值是32767?

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

我想这与存储在16位(短符号)有关。

这只是意味着标准只要求RAND_MAX具有最小值,我们可以从C99标准草案中看到,C++标准在这种情况下依赖于该草案。在第7.20.2.1节中,rand函数显示:

RAND_MAX宏的值应至少为32767。

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

有许多可用的标准C++库libstdc++和libc++是其中的两个,它们中的每一个都可以具有不同的RAND_MAX值,并且只要它至少是32767,就仍然符合该标准。