Tôi quan tâm đến C++, mặc dù tôi nghi ngờ rằng chỉ cần nhập định nghĩa chuẩn C. Tôi tin rằng câu trả lời là không cho những gì tiêu chuẩn nói, nhưng tôi quan tâm nhất đến câu trả lời trong thực tế.Giá trị của RAND_MAX luôn luôn (2^n) -1?
Nếu RAND_MAX luôn là (2^n) -1, đơn giản hóa việc xử lý sự cố đã bật mã di chuyển gần đây từ MinGW GCC sang Linux GCC. RAND_MAX có vẻ lớn hơn (tôi không kiểm tra, nhưng có thể bằng INT_MAX hoặc bất kỳ biểu tượng nào), vì vậy một số mã RAND_MAX-không-lớn-đủ-để-làm-xung-quanh cũ đã bị phản tác dụng. Bây giờ tôi cần phải quyết định tổng thể tôi cần thư viện này như thế nào, xem xét tính không phù hợp của việc viết mã đối phó chính xác với khả năng tràn mà không đưa ra các giả định về ví dụ. chiều rộng của một int.
Dù sao, có bất kỳ trình biên dịch C++ được sử dụng rộng rãi hợp lý nào sử dụng thứ gì khác hơn (2^n) -1 cho RAND_MAX không?
Ngoài ra, tôi có đúng không ((RAND_MAX | (RAND_MAX >> 1)) == RAND_MAX) luôn luôn và chỉ đúng nếu RAND_MAX bằng ((2^n) -1) đối với một số nguyên không dấu n. Tôi tin rằng RAND_MAX về mặt kỹ thuật là một int, nhưng nó không có ý nghĩa để có một giá trị âm hoặc phân số, vì vậy tôi nghĩ rằng tôi có thể giảm giá một cách an toàn. Bit-fiddling thường không làm phiền tôi, nhưng tôi cứ nghĩ biểu hiện có vẻ sai, và tôi không thể hiểu tại sao.
Cuối cùng, mặc dù tôi sẽ không hạnh phúc cho đến khi tôi có giải pháp làm việc của riêng mình, những gì nên Tôi đang sử dụng số ngẫu nhiên thay vì tự viết? Tôi cần số ngẫu nhiên trong phạm vi 0 < = tham số x < và tôi đặc biệt muốn xác suất bằng nhau cho tất cả các số. Ví dụ, tham gia (rand()% upperbound) cho một thiên vị đối với các giá trị nhỏ hơn, đặc biệt khi upperbound là lớn - tôi muốn tránh điều đó.
Có điều Boost hoặc C++ 0x cho điều đó không?
EDIT
Tiếp theo một cái gì đó trong "liên quan" chút ở mặt bên của trang hiển thị có thực sự là một cách để có được số ngẫu nhiên với cho giới hạn thấp hơn và cao hơn trong tăng.
Tôi đã có một thực hiện twister Mersenne - không có lý do chính đáng, chỉ cần nó được đề cập trong một cuốn sách. Một phiên bản thư viện tốt sẽ thực tế hơn, tất nhiên. Cảm ơn vì những lời khuyên. – Steve314
Tôi muốn chuyển sang Tăng tốc nếu tôi là bạn; nó phân tách rõ ràng PRNG khỏi các phân bố xác suất và bao gồm một lớp 'random_device' cho việc gieo giống thích hợp (http://www.boost.org/doc/libs/release/doc/html/boost/random_device.html). –
Được chấp nhận khoảng 80% vì những quan niệm sai lầm về liên kết rand - điểm Boost là thực tế hơn, nhưng liên kết đó rất thú vị. – Steve314