Lưu ý: Vì lý do ngắn gọn, sau đây sẽ không phân biệt giữa ngẫu nhiên và giả ngẫu nhiên. Ngoài ra, trong bối cảnh này, chế nghĩa giữa phút nhất định và tối đa các giá trị)Tạo các giá trị giới hạn ngẫu nhiên (giả) của (U) Int64 và số thập phân
Lớp System.Random
cung cấp thế hệ ngẫu nhiên của số nguyên, đôi và mảng byte. Sử dụng Random.Next, người ta có thể dễ dàng tạo ra các giá trị ràng buộc ngẫu nhiên của kiểu Boolean, Char, (S) Byte, (U) Int16, (U) Int32. Sử dụng Random.NextDouble()
, người ta cũng có thể tạo ra các giá trị giới hạn của các kiểu Double và Single (theo như sự hiểu biết của tôi về kiểu này). Tạo chuỗi ngẫu nhiên (có chiều dài và bảng chữ cái đã cho) hasalsobeentackledbefore.
Xem xét các loại dữ liệu nguyên thủy còn lại (không bao gồm Đối tượng): Thập phân và (U) Int64. Thế hệ ngẫu nhiên của họ cũng đã được giải quyết (Decimal, (U)Int64 sử dụng Random.NextBytes()
), nhưng không phải khi bị hạn chế. Từ chối lấy mẫu (tức là vòng lặp cho đến khi giá trị được tạo ra là phạm vi mong muốn) về mặt lý thuyết có thể được sử dụng, nhưng rõ ràng đây không phải là một giải pháp thực tế. Việc chuẩn hóa NextDouble()
sẽ không hoạt động do không có đủ số chữ số đáng kể.
Nói tóm lại, tôi yêu cầu cho việc thực hiện đúng các chức năng sau:
long NextLong(long min, long max)
long NextDecimal(decimal min, decimal max)
Lưu ý rằng, kể từ khi System.DateTime
được dựa trên một ulong, chức năng đầu tiên sẽ cho phép hệ ràng buộc ngẫu nhiên của cấu trúc như tốt (tương tự như here, chỉ trong ve thay vì phút).
Cảm ơn bạn đã hướng dẫn! +1 –
Thực sự có khó không? Tôi phải thiếu một cái gì đó, vì suy nghĩ đầu tiên của tôi là sử dụng 'Random.NextBytes' và sử dụng các hoạt động bitwise để áp dụng chúng vào các bit thập phân thích hợp để lấy giá trị từ 0 đến 1. –