Giả sử tôi đang tạo một bảng foo với cột thanh phải là một số nguyên ngẫu nhiên rất lớn.Chất lượng của hàm random() của PostgreSQL?
CREATE TABLE foo (
bar bigint DEFAULT round(((9223372036854775807::bigint)::double precision * random())) NOT NULL,
baz text
);
Đây có phải là cách tốt nhất để làm điều này không? Có ai nói chuyện với chất lượng của chức năng random()
của PostgreSQL không? Phép nhân ở đây có che dấu entropy không?
Lưu ý rằng tôi do có phần ăn entropy phần cứng tốt vào /dev/random
.
Đây là vẻ đẹp của nguồn mở! –
Bất kỳ thông tin nào khác về phần nhân của câu hỏi này? Phép nhân ở đây có che dấu entropy không? –
Số của bạn trông giống như một chữ ký dài tối đa (2 ** 63-1), là một miền lớn hơn so với ngẫu nhiên của pg. [IEEE 754 double] (http://en.wikipedia.org/wiki/Double_precision_floating-point_format) chỉ có 53 bit chính xác mantissa cũng nhỏ hơn tên miền 63 bit của bạn. Vì vậy, câu trả lời ngắn, tôi nghĩ rằng phát ngẫu nhiên đến 63 bit sẽ nhận được độ bao phủ thưa thớt trong các bit đặt hàng thấp và bạn sẽ nhận được mức độ phù hợp tốt hơn nếu bạn giới hạn nhân với cùng một không gian như PRNG lõi (2 ** 48) . – dbenhur