javascript - 我可以在整个空间上生成一个随机 float 吗?

标签 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

有什么办法吗?

最佳答案

你可以做什么:

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

这会生成一个均匀分布的 double IEEE754 数字。因此,整个空间中的每个可能值都同样有可能通过此代码获得,包括 NaN(实际上有很多 NaN - 2^ 53 - 2) 和 Infinity

引用资料:

关于javascript - 我可以在整个空间上生成一个随机 float 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43079804/

相关文章:

javascript - asp.net json 显示奇怪的结果

javascript - Shopify 售完后隐藏变体

javascript - 将两个不同的参数传递给函数

c++ - 理解 C++ 算法二进制搜索背后的工作原理的问题

java - 整数到随机数的稳定映射

javascript - IE onpaste JavaScript 事件

algorithm - 具有某些公共(public)边的两个图上的最小生成树

java - 使用合并排序从文本文件中读取的 100000 个整数的反转计数。但无法获得正确的反转计数

c - 如何从一定范围内生成随机整数

python - 如何从现有样本数据中生成随机数据?