javascript中来自crypto.randomBytes()的浮点数

时间:2013-04-01 22:26:43

标签: javascript math cryptography

如何将从crypto.randomBytes返回的字节数组转换为浮点数?我正在为Math.random()

写一个小替代品

1 个答案:

答案 0 :(得分:4)

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

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

这在[0,1]中提供了2 53 可能的结果。由于浮点分辨率随着值接近于零而更精细,因此可以提供更多,但是存在均匀性和其他问题的问题。