C++ std::minstd_rand的界限是什么?
从标题C++ std::minstd_rand的界限是什么?,c++,random,C++,Random,从标题,有一个名为std::minstd\u rand的引擎 此引擎随机数的边界是包含的还是独占的?它有min和max函数,但我特别想知道随机模拟是否可以等于min或max,而不是仅仅受它们的限制 文档中使用了单词“between”,这当然不是明确的 t有min和max函数,但我特别想知道随机模拟是否可以等于min或max 对 来自(我的): min[静态] 获取输出范围中可能的最小值 (公共静态成员函数) max[静态] 获取输出范围中可能的最大值 (公共静态成员函数) t有min和max函数
,有一个名为std::minstd\u rand
的引擎
此引擎随机数的边界是包含的还是独占的?它有min
和max
函数,但我特别想知道随机模拟是否可以等于min
或max
,而不是仅仅受它们的限制
文档中使用了单词“between”,这当然不是明确的
t有min
和max
函数,但我特别想知道随机模拟是否可以等于min
或max
对
来自(我的):
min[静态]
获取输出范围中可能的最小值
(公共静态成员函数)
max[静态]
获取输出范围中可能的最大值
(公共静态成员函数)
t有min
和max
函数,但我特别想知道随机模拟是否可以等于min
或max
对
来自(我的):
min[静态]
获取输出范围中可能的最小值
(公共静态成员函数)
max[静态]
获取输出范围中可能的最大值
(公共静态成员函数)
我认为我们可以更精确一点 正如你所看到的,
std::minstd\u rand
实际上是std::linear\u concurrential\u引擎
,因此我的共同回答者强调了这一点
为了简单地检查生成器是否确实可以生成由min()max()返回的值,我们可以使用这个更简单的生成器
std::线性同余引擎
如果我们测试它
#include <random>
#include <iostream>
int main()
{
std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 5> gen;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 5>::min() << std::endl;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 5>::max() << std::endl<< std::endl;
gen.seed(1);
for (int i = 0; i < 5; i++)
{
std::cout << gen() << std::endl;
}
std::cout << std::endl;
return 0;
}
正如你所看到的,发电机确实达到了最小值和最大值,所以
min[static]获取输出范围内可能的最小值(公共静态成员函数)
max[static]获取输出范围内可能的最大值(公共静态成员函数)
生成器遵循此规则。
因此,基本上min()返回1
,max()返回m-1
。没有比这更聪明的了
如果我使用另一个生成器std::linear\u congressional\u引擎
并测试它
#include <random>
#include <iostream>
int main()
{
std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 6> gen;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 6>::min() << std::endl;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 6>::max() << std::endl << std::endl;
for (int s = 0; s < 6; s++)
{
gen.seed(1);
for (int i = 0; i < 5; i++)
{
std::cout << gen() << " ";
}
std::cout << std::endl;
}
return 0;
}
无论种子是什么,输出总是3。点击min
和max
最后回答这个问题
此引擎随机数的边界是包含的还是独占的
我不知道。视情况而定。我不知道是否有人曾经证明过,对于任何种子,对于std::minstd\u rand
生成器,min
和max
,最终都会命中min,但这更像是一个数学交换问题…我认为我们可以更精确一点
正如你所看到的,std::minstd\u rand
实际上是std::linear\u concurrential\u引擎
,因此我的共同回答者强调了这一点
为了简单地检查生成器是否确实可以生成由min()max()返回的值,我们可以使用这个更简单的生成器
std::线性同余引擎
如果我们测试它
#include <random>
#include <iostream>
int main()
{
std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 5> gen;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 5>::min() << std::endl;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 5>::max() << std::endl<< std::endl;
gen.seed(1);
for (int i = 0; i < 5; i++)
{
std::cout << gen() << std::endl;
}
std::cout << std::endl;
return 0;
}
正如你所看到的,发电机确实达到了最小值和最大值,所以
min[static]获取输出范围内可能的最小值(公共静态成员函数)
max[static]获取输出范围内可能的最大值(公共静态成员函数)
生成器遵循此规则。
因此,基本上min()返回1
,max()返回m-1
。没有比这更聪明的了
如果我使用另一个生成器std::linear\u congressional\u引擎
并测试它
#include <random>
#include <iostream>
int main()
{
std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 6> gen;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 6>::min() << std::endl;
std::cout << (std::uint_fast32_t) std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 6>::max() << std::endl << std::endl;
for (int s = 0; s < 6; s++)
{
gen.seed(1);
for (int i = 0; i < 5; i++)
{
std::cout << gen() << " ";
}
std::cout << std::endl;
}
return 0;
}
无论种子是什么,输出总是3。点击min
和max
最后回答这个问题
此引擎随机数的边界是包含的还是独占的
我不知道。视情况而定。我不知道是否有人曾经证明过,对于任何种子,你最终总是在std::minstd\u rand
生成器中点击min
和max
,但这更像是一个数学交换问题…来自min
“在输出范围内获得最小可能值”和max
“获取输出范围内可能的最大值”。根据该措辞,我假设这两个值都包含在内。从min
“获取输出范围内可能的最小值”和max
“获取输出范围内可能的最大值“从这一措辞来看,我认为这两种价值观都是包容性的。