2008-08-03 44 views
34

Tôi đang tìm kiếm một RNG hiệu suất cao, hợp lý, không sử dụng phần cứng đặc biệt. Nó có thể sử dụng phương pháp toán học (Mersenne Twister, vv), nó có thể "thu thập entropy" từ máy, bất cứ điều gì. Trên Linux/etc, chúng tôi có một drand48() tạo ra 48 bit ngẫu nhiên. Tôi muốn một hàm/lớp tương tự cho C++ hoặc C# có thể tạo ra hơn 32 bit ngẫu nhiên và các bit có thứ tự thấp bằng nhau như các bit có thứ tự cao.Số ngẫu nhiên mạnh mẽ Thế hệ

Nó không phải bảo mật về mặt mã hóa nhưng không được sử dụng hoặc dựa trên ngôn ngữ C rand() hoặc .NET System.Random.

Bất kỳ mã nguồn, liên kết đến nguồn, v.v. sẽ được đánh giá cao! Nếu không, tôi nên tìm kiếm TYPE nào của RNG?

+0

Tại sao không phải 'System.Random'? Tôi biết rằng 'rand' là người nghèo,' System.Random' cũng nghèo? Nếu vậy, điều đó thật buồn: ( –

+3

Lý do cho việc đóng câu hỏi này có vẻ không chính xác chút nào. – bames53

+0

@ bames53 Tôi đã đăng một cuộc bầu cử lại ngay bây giờ. Bạn dường như có đủ đại diện, vì vậy hãy làm như vậy. :-D –

Trả lời

27

Đối với C++, Boost.Random có lẽ là những gì bạn đang tìm kiếm. Nó có hỗ trợ cho MT (trong số nhiều thuật toán khác), và có thể thu thập entropy thông qua lớp nondet_random. Kiểm tra nó ra! :-)

8

The Gnu Scientific Library (GSL) có bộ tạo RN khá rộng, khai thác thử nghiệm, v.v. Nếu bạn đang sử dụng Linux, có thể đã có trên hệ thống của bạn.

7

Xem thư viện khoa học Gnu. Nó được cấp phép theo GPL thay vì LGPL.

Như những người khác đã đề cập, các lớp ngẫu nhiên Boost là một khởi đầu tốt. thực hiện của họ phù hợp với mã PRNG dự kiến ​​cho TR1:

http://www.boost.org/doc/libs/1_35_0/libs/random/index.html http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1452.html

Nếu bạn có một phiên bản gần đây của ++ biên dịch G, bạn có thể tìm thấy các thư viện TR1 đã bao gồm

2

Boost.Random là sự lựa chọn đầu tiên của tôi cho RNG

http://www.boost.org/doc/libs/random

+0

Bạn có thể tìm thấy Boost ngẫu nhiên bởi chỉ googling thats lý do tại sao i dint cung cấp bất kỳ liên kết nào.Tôi đã cập nhật nó với liên kết tới lib. –

5

C++ 11 đã sử dụng thư viện số ngẫu nhiên mạnh mẽ dựa trên tăng .random. Bạn có thể truy cập một số công cụ số ngẫu nhiên bằng cách sử dụng các thuật toán khác nhau để đáp ứng các yêu cầu về chất lượng, tốc độ hoặc kích thước của bạn. Việc triển khai chất lượng thậm chí sẽ cung cấp quyền truy cập vào bất kỳ RNG không xác định nào mà nền tảng của bạn cung cấp qua std::random_device.

Ngoài ra còn có nhiều bộ điều hợp để tạo ra các bản phân phối cụ thể, loại bỏ sự cần thiết phải thực hiện thao tác đó bằng tay (thường được thực hiện không chính xác).

#include <random>