Bất kỳ lý do nào không sử dụng Random.NextDouble
và sau đó truyền tới float
? Điều đó sẽ cung cấp cho bạn một dấu phẩy giữa 0 và 1.
Nếu bạn muốn có một hình thức "tốt nhất" khác, bạn cần phải chỉ định các yêu cầu của mình. Lưu ý rằng không nên sử dụng Random
cho các vấn đề nhạy cảm như tài chính hoặc bảo mật - và bạn thường nên sử dụng lại một cá thể hiện có trong toàn bộ ứng dụng của mình hoặc một cho mỗi chủ đề (như Random
không an toàn cho chủ đề).
EDIT: Như đã đề cập trong các ý kiến, để chuyển đổi này vào một loạt các float.MinValue
, float.MaxValue
:
// Perform arithmetic in double type to avoid overflowing
double range = (double) float.MaxValue - (double) float.MinValue;
double sample = rng.NextDouble();
double scaled = (sample * range) + float.MinValue;
float f = (float) scaled;
EDIT: Bây giờ bạn đã đề cập rằng đây là để thử nghiệm đơn vị, tôi không chắc chắn nó là một cách tiếp cận lý tưởng. Có thể bạn nên thử nghiệm với các giá trị cụ thể - đảm bảo bạn thử nghiệm với các mẫu trong từng danh mục có liên quan - số vô hạn, số NaN, số không chuẩn, số rất lớn, số không, v.v.
Nguồn
2010-07-29 17:30:07
4.0 - được chọn ngẫu nhiên bằng cuộn xúc xắc nổi điểm công bằng. –
@ JesseC.Slicer Bạn quên cung cấp liên kết: http://xkcd.com/221/ – jpmc26