我一直在尝试将哈希值转换为浮点数,到目前为止我只能从中生成一个数字。
如何将SHA256哈希值转换为0.0到1.0之间的浮点数?
我如何得到一个号码,
var hash = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855';
var number = hash.substr(0, 8);
number = parseInt(number, 16);
number = Math.abs(number) % 11;
console.log('Number (0 - 10): ' + number);
答案 0 :(得分:1)
Mörre的评论包含最佳答案。只需获取散列的前52位(或散列的任何方便的52位)并将其分配给javascript编号。 52位整数可以完全以IEEE 754双精度存储。然后简单地将数字除以2 52 ,这应该只影响数字的指数位。结果是浮点数x,0< = x< 1,给定约束条件下尽可能多的熵。
答案 1 :(得分:0)
这样的事情:
var hash = 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855';
var number = 0.0;
for(let i=0;i<hash.length;i++) {
number += parseInt(hash.charAt(i), 16) / 16;
}
number /= hash.length;
console.log('number = ' + number);
在这个例子中,我给32个数字中的每一个赋予相同的权重(这似乎是合理的,因为哈希实际上不是数字)。但是,您可以为不同的字节赋予不同的权重。例如,您可以为第一个字节赋予2 ^ 31的权重,为第二个字节赋予2 ^ 30的权重等,并相应地标准化最终的数字。
编辑:您也可以一次比较多个字节。例如,16个数字,每个来自2个字节,或8个数字,每个来自4个字节,等等。当你增加&#34;单位&#34;大小,得到的最终数字将具有更高的保真度&#34;到原始哈希值。