看起来 Math.random() 生成的是一个范围为 [0,1) 的 64 位浮点数,而新的 crypto.getRandomValues() API 只返回整数。如何使用该 API 产生一个在 [0,1) 范围内的理想数字呢?
这个方法似乎有效但不够优化:
ints = new Uint32Array(2)
window.crypto.getRandomValues(ints)
return ints[0] / 0xffffffff * ints[1] / 0xffffffff
编辑:澄清一下,我正在尝试产生比Math.random()更好的结果。根据我对浮点数的理解,应该有可能得到一个完全随机的52位小数。(?)
编辑2:为了提供一些背景信息,我并不打算做什么加密安全的事情,但有很多关于Math.random()实现不良的轶事(例如http://devoluk.com/google-chrome-math-random-issue.html),所以在有更好的选择时,我想使用它。
Math.abs()
函数?从 Chrome 中看到的,随机数都是正数。 - Šime Vidascrypto.getRandomValues
只生成一个随机的二进制缓冲区,由使用的视图类型将其转化为数字。 - apsillersints[0] / 0xffffffff
不是可以产生一个随机的[0,1)
值吗? - Šime Vidas