2013-09-25 38 views
5

Tôi đã xem xét vấn đề phát triển yêu cầu sử dụng tạo số giả ngẫu nhiên để cho phép cùng một tập hợp các số ngẫu nhiên được tạo cho một hạt giống đã cho. Tôi hiện đang xem xét sử dụng long random(void)void srandom(unsigned seed) cho điều này (man page) và hiện tại chúng đang tạo cùng một bộ số ngẫu nhiên trong ứng dụng Mac, ứng dụng iOS và ứng dụng iOS (64 bit). hi vọng. Các bài kiểm tra iOS chỉ có trong trình mô phỏng nên tôi không biết liệu điều này có ảnh hưởng đến kết quả hay không.Liệu ngẫu nhiên() có thay đổi không?

Mối quan tâm chính của tôi là thuật toán này có thể thay đổi tại một thời điểm nào đó, làm cho các ứng dụng chúng tôi đang phát triển hiệu quả vô dụng với dữ liệu cũ. Khả năng của các thuật toán này thay đổi/khác nhau trên một thiết bị trong tương lai là gì?

+0

Bất kỳ ai thảo luận về RNG luôn mang đến dải Dilbert cổ điển này cho tâm trí ... http://dilbert.com/strips/comic/2001-10-25/ // on-topic: Tôi nghĩ @Bathsheba là điểm trên :) – Luke

+0

Chúng có thể sẽ không thay đổi, vì có nhiều khả năng phụ thuộc vào chúng. Nhưng không co sự bảo đảm nao. –

Trả lời

6

Tôi muốn nói rằng đó là cực kỳ khả năng họ sẽ thay đổi khi chuỗi không được đảm bảo theo bất kỳ tiêu chuẩn nào.

Tại sao không sử dụng chuỗi số ngẫu nhiên của riêng bạn? Ngay cả một máy phát điện đồng đẳng tuyến tính đơn giản cũng đáp ứng được hầu hết các tính chất thống kê của ngẫu nhiên. Dưới đây là công thức cho một máy phát điện như:

next_number = (a * current_number + b) % c 

với

a = 1103515245 
b = 12345 
c = 4294967296 

Những giá trị của a, b, c cung cấp cho bạn tính thống kê tốt và khá nổi tiếng với việc xây dựng nhanh chóng và dơ bẩn phát .

2

Tôi không có ý tưởng nhỏ nhất về câu trả lời cho câu hỏi mà bạn yêu cầu.

Nếu câu hỏi liên quan là "Làm thế nào tôi có thể chắc chắn có cùng chuỗi giả ngẫu nhiên được tạo trong thời gian 10 năm?", Câu trả lời cho câu hỏi này là: không dựa vào thư viện bên ngoài, viết mã một cách rõ ràng.

Bathsheba được đề xuất this generator. Bạn có thể google cho "thuật toán máy phát ngẫu nhiên giả". Dưới đây là danh sách các thuật toán được liệt kê trên wikipedia.

+0

+1 cho liên kết chứa các giá trị khác cho a, b và c (ký hiệu của tôi) – Bathsheba

0

Thực tế, srandom đã thay đổi kể từ Mac OS X 10.7, theo this blog post. Tuy nhiên, đây là do đến cách srandom được triển khai: nó cố truy cập biến cục bộ chưa được khởi tạo, trong đó là hành vi không xác định trong C. Theo bài đăng, trình biên dịch mới được sử dụng từ Mac OS X 10.7 tối ưu hóa bộ nhớ chưa được khởi tạo truy cập, thay đổi hành vi của nó theo cách tinh tế .

+0

Nó không phải là hàm tạo số ngẫu nhiên 'srandom' đã thay đổi, nhưng hàm seed' srandomdev'. Vì OP sử dụng một hạt giống cố định 'srandom' có thể vẫn tạo ra các giá trị giả ngẫu nhiên giống hệt nhau. Điều này, tất nhiên, không thay đổi thực tế rằng 'srandom' * có thể * thay đổi bất cứ lúc nào. –

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