通过伪随机朴素随机数发生器产生随机数序列的正确方法

时间:2017-08-30 15:15:42

标签: javascript node.js random

我想评估Node.js中的伪随机原始随机数生成器(prng):Math.random以及其他第三方prng。

我使用的测试套件是ENT

我面临的问题是如何通过Node.js中的prng为ENT生成输入文件:

function generateNumber() {
    return Math.floor(Math.random() * 10)
}

const numbers = []
for (let i = 0; i < 10000000;i++) {
    const r = generateNumber()
    numbers.push(r)
}

let result = ''
numbers.map(function (t) { result += t })
const fs = require('fs')
fs.writeFile('output.txt', result)

从上面生成的文件与ENT不兼容。但是,我在Linux命令中创建了另一个文件:

dd if=/dev/random of=random_output count=8192

这个输出效果很好。我发现我用nodejs创建的文件是0和1作为文本文件。也许序列应该转换为二进制文件。我想知道如何修改我的javascript代码?

1 个答案:

答案 0 :(得分:0)

是的,ent需要纯二进制数据。这是一种方法:

let words = new Uint16Array(4096);

for (let i = 0; i < 4096; i += 1) {
    words[i] = Math.floor(65536 * Math.random());
} 

let fs = require('fs');
fs.writeFile('words.bin', new Buffer(words.buffer), 'binary');