我一直试图创建一个函数,通过Window.crypto.getRandomValues()
函数返回0(含)和1(不包含)之间的随机十进制数。目前,我的代码如下:
var rand = function(){
var ra = window.crypto.getRandomValues(new Uint32Array(1))[0];
function dec(n,m){
return (n>=0&&n<=1)?n:dec(n/m,m);
}
return dec(ra,8);
}
我的问题是这不是均匀分布的;它倾向于在.2和.7之间,很少在.2和.7之间。有没有更好的方法来使用.getRandomValues()
方法获取类似Math.random()
函数的数字?
我没有使用.random()
方法,因为我希望为我要执行的操作设置安全数字。
答案 0 :(得分:5)
为什么不简化事情
function cryptoRandom() {
return window.crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000;
}
这里发生了什么?
window.crypto.getRandomValues
将给我们真正的随机位i
)min
的{{1}} ium值为i
(或0x00000000
)0
的{{1}} imum值为max
(或i
)0xFFFFFFFF