C ++ 11 bao gồm một trình tạo Mersenne Twister theo mặc định như một phần của <random>
giao diện mới . Ví dụ: để tạo các số nguyên thống nhất giữa [-10, 10] bằng MT:
std::mt19937 eng; // This is the Mersenne Twister
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;
Hầu hết điều này cũng có sẵn trong bất kỳ trình biên dịch nào cung cấp TR1 mặc dù tên hơi khác nhau; std::tr1::mt19937
và std::tr1::uniform_int<int>
.
Tôi thường cảnh báo mọi người tránh sử dụng Mersenne Twister. Đó là một thuật toán ổn nhưng rất nhiều sự phổ biến của nó chỉ là tiếp thị. 624 kích thước ngẫu nhiên là nhiều hơn hầu hết mọi người cần, và MT thực hiện các yêu cầu trạng thái tương đối nặng và khi thực hiện lại toàn bộ bảng, nó có thể thổi bộ đệm. Cá nhân tôi là một phần của xorshift , cung cấp các giai đoạn tuyệt vời và phân phối hợp lý cho mọi thứ mà trò chơi cần, với các yêu cầu nhỏ về bộ nhớ và CPU.
Tôi đã viết một trình tạo xorshift tương thích (hầu hết?) C ++ 11 - xorshift.hpp , xorshift.cpp - và đặt nó vào miền công cộng. Bạn có thể cắm cái này vào bất kỳ chức năng ngẫu nhiên hóa C ++ 11 nào, như trên:
xorshift eng;
std:::uniform_int_distribution<int> dist(-10, 10)
for (int i = 0; i < 10; ++i)
std::cout << dist(eng) << std::endl;