Ví dụ: nếu tôi khởi tạo một số std::mt19937
với cùng một hạt giống và thông số theo GCC và dưới MSVC, tôi có nhận được cùng một chuỗi các số ngẫu nhiên không? Nếu vậy tôi giả định tài sản này sẽ giữ cho mersenne_twister_engine nói chung kể từ mt19937 chỉ là một với các thông số cụ thể. Điều này là không đúng cho rand()
trong C. Có vẻ như các tài liệu tiêu chuẩn các biến đổi được áp dụng trong điều khoản của mã cụ thể, vì vậy tôi nghi ngờ nó nên luôn luôn giống nhau, nhưng ma quỷ là trong các chi tiết ...Chuẩn C++ 11 có đảm bảo các số ngẫu nhiên giống hệt nhau cho cùng một hạt giống trên các triển khai không?
Trả lời
Đối với các công cụ số ngẫu nhiên mới, có, cho cùng một hạt giống và các thông số bạn sẽ nhận được cùng một chuỗi các giá trị trên tất cả các nền tảng. Đối với rand()
, không. Bạn cũng không có đảm bảo đó với các bản phân phối số ngẫu nhiên, ngay cả khi chúng được nạp cùng một chuỗi các giá trị đầu vào.
Ngoài ra các bản phân phối không được đảm bảo để tạo ra các giá trị giống nhau, do đó việc kết hợp động cơ với phân phối sẽ không cho kết quả giống nhau trên các nền tảng. – bames53
Chuẩn C, 7.22.2.2/2 "Hàm srand sử dụng đối số như một hạt giống cho một chuỗi các số giả ngẫu nhiên mới được trả về bởi các lệnh gọi tiếp theo đến rand. Nếu srand sau đó được gọi với cùng giá trị hạt giống, chuỗi của các số giả ngẫu nhiên phải được lặp lại. Nếu rand được gọi trước khi bất kỳ cuộc gọi nào đến srand đã được thực hiện, cùng một chuỗi sẽ được tạo ra khi srand được gọi đầu tiên với giá trị hạt giống là 1. " Làm thế nào mà không phải là một sự bảo đảm? – rici
Ngoài ra, với C++, sự hiểu biết của tôi là toán tử == trên hai máy phát, bộ điều hợp hoặc phân phối sẽ là iff đúng, chúng sẽ tạo ra các chuỗi vô hạn giống nhau, vì vậy có thể có được sự đảm bảo nếu tồn tại. – rici
- 1. số ngẫu nhiên với hạt giống
- 2. Số ngẫu nhiên từ hạt giống
- 3. Các số ngẫu nhiên giống nhau lặp lại vòng lặp
- 4. Máy phát ngẫu nhiên từ Delphi có tính giống như C# nếu được cấp cùng một hạt giống không?
- 5. Hạt giống ngẫu nhiên Math.random trong Java
- 6. Nhiều số ngẫu nhiên đều giống nhau
- 7. Đặt tăng hạt giống :: ngẫu nhiên
- 8. Giống và sử dụng lại các hạt giống ngẫu nhiên của Python
- 9. Số ngẫu nhiên Java Sử dụng hạt giống
- 10. Có phải C++ hiện đại dùng srand để đặt hạt giống ngẫu nhiên không?
- 11. Trình tự ngẫu nhiên của Python với hạt giống
- 12. Hạt giống ngẫu nhiên khác nhau cần phải như thế nào?
- 13. Làm thế nào để đặt hạt giống cho các mô phỏng ngẫu nhiên với các gói foreach và doMC?
- 14. Đặt hạt giống ngẫu nhiên tạm thời, như "ngẫu nhiên mới()"
- 15. C++ 11 số ngẫu nhiên
- 16. Tại sao hàm C++ stdlib rand() cung cấp các giá trị khác nhau cho cùng một hạt giống trên các nền tảng?
- 17. Sử dụng đa xử lý python với các hạt giống ngẫu nhiên khác nhau cho mỗi quá trình
- 18. Xác định số ngẫu nhiên trên các hệ thống
- 19. Lấy ngày giờ hiện tại cho hạt giống số ngẫu nhiên của máy phát điện
- 20. Các ký tự giống hệt nhau trong Unicode
- 21. Tại sao số ngẫu nhiên đầu tiên luôn giống nhau trên một số nền tảng trong lua?
- 22. Cách đặt hạt giống tùy chỉnh cho trình tạo số giả ngẫu nhiên
- 23. Các số ngẫu nhiên giống nhau mỗi khi tôi chạy chương trình
- 24. Số ngẫu nhiên xác định Các luồng trong C++ STL
- 25. Các nguồn Java giống hệt nhau được biên dịch thành các lớp nhị phân khác nhau
- 26. Cách lấy hạt giống hiện tại từ C++ rand()?
- 27. Liệu rand() của stdlib có luôn giống nhau không?
- 28. Các cụm hadoop có chạy trên phần cứng giống hệt nhau không?
- 29. Mẫu phù hợp với các giá trị giống hệt nhau
- 30. giữ 2 mysql dbs giống hệt nhau trên hai máy
Các cách triển khai khác nhau của 'rand' sử dụng các hằng số khác nhau để chúng không bao giờ khớp. Wikipedia chứa danh sách hữu ích: http://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use –
@MarkRansom: Các triển khai khác nhau được phép sử dụng các thuật toán hoàn toàn khác nhau cho rand(), hằng số tồn tại. –
"Được phép sử dụng", chắc chắn. Trong thực tế, tất cả chúng dường như giống nhau. –