5
假設我正在創建一個表foo帶有一列bar應該是一個非常大的隨機整數。PostgreSQL的random()函數的質量?
CREATE TABLE foo (
bar bigint DEFAULT round(((9223372036854775807::bigint)::double precision * random())) NOT NULL,
baz text
);
這是最好的方法嗎?任何人都可以談論PostgreSQL的random()
函數的質量嗎?這裏的乘法是否掩蓋了熵?
請注意,我做有很好的硬件entropy饋入/dev/random
。
這是開源的美! – 2012-03-22 07:42:04
有關這個問題的乘法部分的更多信息?這裏的乘法是否掩蓋了熵? – 2012-03-22 18:01:59
你的號碼看起來像一個最大簽名長(2 ** 63-1),這是一個比pg的隨機產生的更大的域。一個[IEEE 754 double](http://en.wikipedia.org/wiki/Double_precision_floating-point_format)只有53比特的尾數精度,它也比你的63比特域小。所以簡短的回答,我認爲將隨機數擴展到63位將會得到低階位的稀疏覆蓋,如果將乘法限制在與核心PRNG(2 ** 48)相同的空間,您將獲得更好的覆蓋率。 。 – dbenhur 2012-03-22 19:05:22