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
“获取输出范围内可能的最大值“从这一措辞来看,我认为这两种价值观都是包容性的。