javascript - 如何(可能)获得 0 到 255 之间的所有均匀分布的浮点值
问题描述
假设integer
下面是由一个真正的随机数生成器产生的,并且数字在0
和之间随机变化255
。
let integer = 241 // true random number
对于我正在处理的应用程序,我需要将该数字转换为介于0
和之间的浮点小数1
,看起来更像Math.random()
.
所以,
let float = integer/((2**8)-1)
如果integer
更改为 0 到 255 之间的新随机整数,这会提供其他“质量”浮点数吗?例如,请求 Uint16 之间的数字 0–65535
会let float = integer/((2**16)-1)
是更好的方法吗?
请注意,我这样做的目的不是为了安全、加密或密码学。我只需要添加类似于Math.random()
. 我使用这些数字插入使用 Box Müller 的归一化变换,以创建模拟随机游走。
解决方案
在 JavaScript 中,数字被实现为具有 53 个有效位精度的二进制浮点数格式(更具体地说,是 IEEE 754 的 binary64 格式)。
但是,通过将整数与常数相乘或除以生成统一的浮点数(通常是这种情况)通常会使一些浮点数没有发生的机会,即使它们位于正确的范围内,即使它们可以用相关的浮点格式表示。有关详细信息,请参阅 F. Goualard,“通过整数除法生成随机浮点数:案例研究”。
相反,可以执行一个更复杂的过程来为每个浮点数提供预期的发生概率,就像我所做的那样,例如. 请注意此过程的重要性。另请参阅我对问题的回答:包含范围内的随机浮点双精度
推荐阅读
- sqlite - 根据选择查询的输出连接表
- tensorflow-lite - 有没有办法在 Edge TPU 上获取一批图像到 TFLite 模型?
- ios - 使用 indexOfObject:inSortedRange:options:usingComparator: 二进制搜索基于属性前缀过滤 NSArray
- javascript - 使用JS从json中删除具有空值的键
- php - cakephp CSRF 令牌绕过
- docker - 如何在不执行指定命令的情况下启动 docker 容器
- c# - 更改窗口样式
- swift - 为什么在实现 KYDrawerController 时标签栏被移除?
- node.js - 意外数字:加载 CSV 文件时 Node.js 上的 csv-parser 模块中的语法错误
- laravel - 检查侦听器返回值并在 laravel 中执行操作是否可以接受?