sig*_*lup 4 javascript math cryptography
如何将从 crypto.randomBytes 返回的字节数组转换为浮点数?我正在为 Math.random() 写一个小的替代品
假设您有一系列随机选择的字节,并在 [0, 256) 上均匀分布。取其中的七个字节,比如说 a 0、 a 1、... a 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 的五位。然后除以 32 将这些位“移”到小数点的右侧,添加 8 个新位,除以 256“移”八位,依此类推,直到我们有 53 位。
这在 [0, 1) 中提供了 2 53 个可能的结果。可以提供更多,因为浮点分辨率随着值接近零而更精细,但随后会出现均匀性和其他问题。