c++ - uniform_int_distribution 在这里用错了吗? (我的结果似乎分布不均)

标签 c++ c++11 random distribution

版本 3 将生成器移动到一个类中。这次我的新随机数生成技术正确吗?

template<typename T = int>
    class MyRandomGenerator
    {
    public:
        MyRandomGenerator()
        {
            std::random_device rd;
            gen = std::mt19937{rd()};
        }

        T getNumber(const T& From, const T& To)
        {
            std::uniform_int_distribution<T> dist(From, To);
            return dist(gen);
        }
    private:
        std::mt19937 gen;
    };

这是我的新位置计算器:

auto calculate_x_position = [&]() ->sf::Uint32 {return RandGen.getNumber(0, W - 1); };
auto calculate_y_position = [&]() ->sf::Uint32 {return RandGen.getNumber(0, H - 1); };

与以前相同的模式/问题: enter image description here

版本 2 每秒创建约 3 张 map ,每张 map 10.000 颗星。结果还是一样。此外,更清楚的是 map 顶部有一个枢轴。示例:enter image description here

原始问题: 我开始尝试绘制一个简单的星图。为此,我首先计算星星的 x 和 y 位置。 X和Y在窗口的宽度和高度范围内。

这是我的随机数生成函数:

    template<typename T>
    T getRandomNumberBetween(const T& Min, const T& Max)
    {
        static std::random_device rd;
        static std::uniform_int_distribution<T> dist{Min, Max};
        return dist(rd);
    }

我是这样使用它的:

auto calculate_x_position = std::bind(inc::getRandomNumberBetween<sf::Uint32>, 0, Width-1);
    auto calculate_y_position = std::bind(inc::getRandomNumberBetween<sf::Uint32>, 0, Height-1);
x = calculate_x_position(); //...

但是当我一遍又一遍地绘制我的 map 时,在我看来,大多数星星往往存在的地方都有一个支点。例如。大多数星星都在我窗口的上半部分。

例子:

enter image description here

我是不是用错了或有错误的期望?...因为here它说:

This distribution produces random integers in a range [a,b] where each possible value has an equal likelihood of being produced.

亲切的问候

最佳答案

均匀分布并不具体意味着你会在屏幕的每个象限中获得相同的数量;这意味着每个点出现的机会均等。所以如果你做一个简单的 50:50 试验,并不意味着你会得到 50:50 的结果。

但是,如果您对 1,000,000 颗星星进行了测试,很可能它们几乎是均匀分布的。对我来说,这似乎是样本量的错误

关于c++ - uniform_int_distribution 在这里用错了吗? (我的结果似乎分布不均),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29183501/

相关文章:

javascript 预先编号 onclick 或重新加载

c++ - 复制 token 时访问冲突

c++ - 为什么我的 if 语句会跳过 else?

C++使用cin.get获取字符,遇到EOF不结束while循环

c++ - 如何使 std::regex 在字符串中的特定位置开始匹配?

C++ 随机数生成器只输出 2

C++:为表实现行迭代器

c++ - 为什么会调用复制赋值而不是移动赋值?

c++ - 这个收购围栏是否被观察到?

javascript - 从数组中获取随机条目,打印它并通过拼接删除以避免重复