【发布时间】:2019-11-29 08:59:28
【问题描述】:
我有一个这样的哈希函数。
class Hash {
static rotate (x, b) {
return (x << b) ^ (x >> (32-b));
}
static pcg (a) {
let b = a;
for (let i = 0; i < 3; i++) {
a = Hash.rotate((a^0xcafebabe) + (b^0xfaceb00c), 23);
b = Hash.rotate((a^0xdeadbeef) + (b^0x8badf00d), 5);
}
return a^b;
}
}
// source Adam Smith: https://groups.google.com/forum/#!msg/proceduralcontent/AuvxuA1xqmE/T8t88r2rfUcJ
我就是这样用的。
console.log(Hash.pcg(116)); // Output: -191955715
只要我发送一个整数,我就会得到一个整数。现在问题来了。如果我有一个浮点数作为输入,则会发生舍入。数字 Hash.pcg(1.1) 和 Hash.pcg(1.2) 将产生相同的结果。我希望不同的输入产生不同的结果。一种可能的解决方案是将输入相乘,这样小数点就不会向下舍入,但是有没有更优雅和灵活的解决方案?
有没有办法将浮点数转换为唯一整数?每个浮点数都会产生不同的整数。
性能很重要。
【问题讨论】:
-
当BigInt 类型变得广泛可用时,您将能够将其用于所有按位运算。
标签: javascript floating-point type-conversion integer hash-function