2009-07-10 69 views
8

Tôi muốn biết nếu trong thư viện chuẩn C++ có bất kỳ phân phối gaussian trình tạo số hoặc nếu bạn có đoạn mã nào cần chuyển.C++: tạo phân phối gaussian

Xin cảm ơn trước.

+0

Đoạn mã AC có sẵn trong một tương tự, [câu hỏi sau (bấm vào đây)] (http://stackoverflow.com/questions/17995894/normalgaussian-distribution-function-in-c/23609868#23609868) – jcollomosse

Trả lời

15

Thư viện chuẩn không có. Tuy nhiên, Boost.Random lại làm vậy. Tôi sẽ sử dụng nó nếu tôi là bạn.

6

Thư viện khoa học GNU có tính năng này. GSL - Gaussian Distribution

+0

"sẽ có "? – jalf

+0

Lol, tôi đã viết rằng trước khi tôi nhìn lên câu trả lời ... Tôi đoán tôi nên thay đổi nó :) –

13

C++ Báo cáo kỹ thuật 1 thêm hỗ trợ cho việc tạo số ngẫu nhiên. Vì vậy, nếu bạn đang sử dụng một trình biên dịch tương đối gần đây (Visual C++ 2008 GCC 4.3), rất có thể là nó có sẵn trong hộp.

Xem here để sử dụng mẫu std::tr1::normal_distribution (và nhiều hơn thế nữa).

+1

Nếu nó chưa có, bạn có thể tìm thấy nó như là một phần của Boost, quá: http: //www.boost. org/doc/libs/1_39_0/doc/html/boost_tr1/subject_list.html # boost_tr1.subject_list.random – stephan

4

Câu trả lời cho câu hỏi này thay đổi với C++ 11 có random header bao gồm std::normal_distribution. Giấy của Walter Brown N3551, Random Number Generation in C++11 có lẽ là một trong những giới thiệu tốt hơn cho thư viện này.

Đoạn mã dưới đây trình bày cách sử dụng tiêu đề này (see it live):

#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'; 
    } 
} 

tôi cung cấp một bộ tổng quát hơn của ví dụ này sang thế hệ số ngẫu nhiên trong C++ 11 trong câu trả lời của tôi để C++ random float number generation với một ví dụ trong Tăng cường và sử dụng rand().

Các vấn đề liên quan