5
テーブルfooの列を作成するとします。bar非常に大きなランダムな整数である必要があります。PostgreSQLのrandom()関数の品質は?
CREATE TABLE foo (
bar bigint DEFAULT round(((9223372036854775807::bigint)::double precision * random())) NOT NULL,
baz text
);
これを行うにはこれが最善の方法ですか?誰もPostgreSQLのrandom()
の機能について話すことができますか?乗算はここでエントロピーをマスクしていますか?
doは、/dev/random
に良いハードウェアエントロピーを供給していることに注意してください。
これはオープンソースの美しさです! –
この質問の乗算部分に関するこれ以上の情報はありませんか?乗算はここでエントロピーをマスクしていますか? –
あなたの番号は、最大署名長(2 ** 63-1)のように見えます。これは、pgのランダムが生成するドメインよりも大きいドメインです。 [IEEE 754 double](http://en.wikipedia.org/wiki/Double_precision_floating-point_format)には53ビットの仮数精度しかありません。この仮数精度は63ビットドメインよりも小さいです。短い答えで、私は63ビットにランダムに展開すると、下位ビットでスパースカバレッジを取得すると思うし、コアPRNG(2 ** 48)と同じスペースに乗算を制限すれば、より良いカバレッジを得るでしょう。 。 – dbenhur