assert(lemireHash64(0) == 0UL); assert(lemireHash64(1) == 10826341276197359097UL); assert(lemireHash64(2) == 3205938474390199283UL); assert(lemireHash64(0f) == 0UL); assert(lemireHash64(1f) == 5597974336836488763); assert(lemireHash64(2f) == 4611686018555721673UL);
https://lemire.me/blog/2018/08/15/fast-strongly-universal-64-bit-hashing-everywhere/
Instead of shifts, we use rotations so we don't lose any bits.
Added a final multiplcation with a constant for more mixing. It is most important that the lower bits are well mixed.
Inspired by Lemire's strongly universal hashing.