4

如何将从 crypto.randomBytes 返回的字节数组转换为浮点数?我正在为 Math.random() 写一个小的替代品

4

1 回答 1

5

假设您有一系列随机选择的字节,它们在 [0, 256) 上均匀分布。取其中的七个字节,比如一个0,一个1,……一个6。计算 (((((((a 6 % 32)/32 + a 5 )/256 + a 4 )/256 + a 3 )/256 + a 2 )/256 + a 1 )/256 + a 0 )/ 256.

解释:a 6 % 32 表示6模 32 的余数。这需要6的 5 位。然后除以 32 将这些位“移动”到小数点的右侧,添加 8 个新位,除以 256 将“移动”右 8 位,依此类推,直到我们有 53 位。

这在 [0, 1) 中提供了 2 53个可能的结果。可以提供更多,因为随着值接近零,浮点分辨率会更好,但随之而来的是一致性问题和其他问题。

于 2013-04-04T18:54:41.197 回答