سؤال

أود أن أعرف إذا كان في المكتبات القياسية C ++ هناك أي التوزيع البياني رقم مولد، أو إذا كان لديك أي قصاصات رمز لتمريرها.

شكرا مقدما.

هل كانت مفيدة؟

المحلول

المكتبة القياسية لا. boost.random يفعل ذلك. كنت أستخدم ذلك لو كنت أنت.

نصائح أخرى

C ++ التقرير الفني 1 يضيف الدعم لتوليد الأرقام العشوائية. لذلك إذا كنت تستخدم مجموعة مترجم حديثة نسبيا (Visual C ++ 2008 GCC 4.3)، فإن الفرص هي أنها متوفرة خارج الصندوق.

يرى هنا لعينة استخدام std::tr1::normal_distribution (و أكثر من ذلك بكثير).

تحتوي مكتبات جنو العلمية على هذه الميزة. GSL - توزيع غاوسي

التغييرات الإجابة على هذه السؤال مع C ++ 11 والتي لديها رأس عشوائي الذي يتضمن STD :: Normal_Distribution.. وبعد ورقة والتر براون N3551، جيل الأرقام العشوائية في C ++ 11 ربما واحدة من أفضل المقدمات لهذه المكتبة.

يظهر التعليمات البرمجية التالية كيفية استخدام هذا الرأس (انظر انه لايف):

#include <iostream>
#include <iomanip>
#include <map>
#include <random>

int main()
{
    std::random_device rd;

    std::mt19937 e2(rd());

    std::normal_distribution<> dist(2, 2);

    std::map<int, int> hist;
    for (int n = 0; n < 10000; ++n) {
        ++hist[std::floor(dist(e2))];
    }

    for (auto p : hist) {
        std::cout << std::fixed << std::setprecision(1) << std::setw(2)
                  << p.first << ' ' << std::string(p.second/200, '*') << '\n';
    }
}

أقدم مجموعة أكثر عمومية من الأمثلة إلى جيل الأرقام العشوائية في C ++ 11 في إجابتي جيل رقم عشوائي عشوائي مع مثال في دفعة واستخدام rand() كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top