我可以在整个空间生成随机浮点数吗?

时间:2017-03-28 20:57:06

标签: javascript algorithm random floating-point buffer-overflow

我正在尝试生成一个范围从Number.MIN_VALUE到Number.MAX_VALUE的随机数,但由于缓冲区溢出(我猜),以下算法失败:

var randFloat = Math.floor(Math.random() * (Number.MAX_VALUE - Number.MIN_VALUE)) + Number.MIN_VALUE

有什么办法吗?

1 个答案:

答案 0 :(得分:1)

你能做什么:

function IEEEToDouble(f)
{
    return new Float64Array(f.buffer)[0];
}

var array = new Uint32Array(2); // here we allocate a 2 element unsigned 32 bit ints
window.crypto.getRandomValues(array); // here we generate 64 bits of random values
var f = IEEEToDouble(array); // and convert 64 bits to a double precision number

这将生成均匀分布的双精度IEEE754数字。因此,整个空间中的每个可能值都可以使用此代码,包括NaN s(实际上它有很多NaN - 2^53 - 2)和Infinity秒。

参考文献: