我一直在尝试创建一个函数,该函数将通过 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);
}
我的问题是这不是均匀分布的;它往往在 0.2 和 0.7 之间,很少低于 0.2 和超过 0.7。有没有更好的方法来使用
.getRandomValues()
方法来获取类似 Math.random()
函数的数字?我没有使用
.random()
方法,因为我希望为我尝试执行的操作提供安全号码。 最佳答案
为什么不简化事情
function cryptoRandom() {
return window.crypto.getRandomValues(new Uint32Array(1))[0] / 0x100000000;
}
这里发生了什么?
window.crypto.getRandomValues
会给我们真正的随机位 i
) min
的 i
ium 值为 0x00000000
(或 0
) max
的 i
imum 值为 0xFFFFFFFF
(或 4294967295
) (i - min) / (max + 1)
关于javascript - 如何获得 [0,1) 范围内的加密强数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27180914/