std :: minstd_rand的界限是什么?

问题描述 投票:0回答:2

从标题<random>,有一个名为std::minstd_rand的引擎。

此引擎的边界是随机数是包含还是排他?它有minmax函数,但我特别想知道随机模拟是否可以等于minmax,而不是仅仅受它们限制。

文档使用“之间”一词,这当然不是明确的。

c++ random
2个回答
2
投票

它有qazxsw poi和qazxsw poi函数,但我特别想知道随机模拟是否可以等于minmax

是。

来自min(强调我的):

max

获取输出范围中可能的最小值(公共静态成员函数)

https://en.cppreference.com/w/cpp/numeric/random/linear_congruential_engine#Characteristics

获取输出范围中的最大可能值(公共静态成员函数)


2
投票

我认为我们可以更准确一点。

你可以看到min [static]真的是max [static],因此我的合作伙伴的重点。

为了简单地检查生成器确实可以产生std::minstd_rand返回的值,我们可以使用这个更简单的生成器。

std::linear_congruential_engine<std::uint_fast32_t, 48271, 0, 2147483647>

如果我们测试它

min() max()

我们得到

std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 5>

正如你所看到的那样,发电机确实击中了最小值和最大值。所以

min [静态]获取输出范围中可能的最小值(公共静态成员函数)

max [static]获取输出范围中可能的最大值(公共静态成员函数)

发电机遵循这条规则#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()返回1 4 3 4 2 1 3 ,max()返回https://en.wikipedia.org/wiki/Linear_congruential_generator。没有比这更聪明的了。

如果我采取另一台发电机1

并测试它

m-1

输出是

std::linear_congruential_engine<std::uint_fast32_t, 3, 0, 6>

无论什么种子,输出总是3.如此多的击中#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; } 1 5 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3

最后回答这个问题

此引擎的边界是随机数是包含还是排他?

我不知道。这取决于。而且我不知道是否有人曾证明无论种子如何,你最终总是为min发电机击中maxmin ......但这更像是一个mathexchange问​​题......

© www.soinside.com 2019 - 2024. All rights reserved.