通过伪随机朴素随机数生成器生成随机数序列的正确方法
问题描述:
我想要评估Node.js中的伪随机朴素随机数生成器(prng):Math.random
以及其他第三方prng。通过伪随机朴素随机数生成器生成随机数序列的正确方法
我使用的测试套件是ENT。
我所面临的问题是如何产生的耳鼻喉科通过PRNG在Node.js的输入文件:
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)
从上面生成的文件并没有很好地工作耳鼻喉科。不过,我创建了Linux命令的另一个文件:
dd if=/dev/random of=random_output count=8192
这个输出效果很好。我发现我用nodejs创建的文件是0s和1s作为文本文件。也许序列应该被转换成二进制文件。我想知道如何修改我的JavaScript代码?
答
是的,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');
您是否在windows平台上使用node.js创建文件? – Psi
@Psi yes windows 10 – itenyh
所以,也许你需要在写入文件之前将文件切换到二进制模式。否则,windows将所有的0x0a转换为0x0d 0x0a =>'fs.writeFile('output.txt',result,'wb')' – Psi