为什么宏的最小值是RAND_MAX,32767
Why is the minimum value of macro : RAND_MAX , 32767
此网站声明宏RAND_MAX
的值与库相关,最小值为32767。它没有进一步详细说明。
-
依赖库是什么意思??这是否意味着假设有两个宏
RAND_MAX
来自两个不同的库,我们必须使用不同的名称空间来区分它们?? -
为什么
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
,就仍然符合该标准。
- <streamsize>C++ 中 numeric_limits::max() 的值
- 黑客级别的Mini-Max Sum
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 关于 std::min, std::max 中的比较运算符的混淆
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- std::max() 函数与定点实现的比较中的问题
- 使用 CImg 库的 std::min 和 std::max 的编译问题
- 在 3ds Max 中更新进度条后,环境和效果 UI 不刷新
- 从自定义类获取对象向量中的 max 元素
- 如何在C++中递归地找到max元素的索引?
- SFINAE 与 numeric_limits<T>::max() 在 MSVC2017 上
- 这句话是什么意思 - " vector<long long> distance(n, std::numeric_limits<long long>::max()); "?
- 在f2c.h文件中定义min()max()宏时出错
- c++curl返回413请求实体过大,但是post大小远小于max大小
- 在枚举类型上使用std::max是不是一种糟糕的做法
- 为什么Visual Studio 2019不支持用于减少Openmp的关键字"max"?
- 没有函数模板的实例"max"与参数列表参数类型匹配(int、int)
- 如何在 C++11 中将 std::max 与自定义比较器一起使用?
- 为什么在这种情况下不能将 Max 用作函数?
- 为什么 UInt64 变量不能包含大于 UInt32::Max 的值?