со знаком плюс около -идеальный хэш

У меня есть целочисленный тип, скажем long, значения которого находятся междуLong.MIN_VALUE = 0x80...0(-2^63 )иLong.MAX_VALUE = 0x7f...f(2^63 -1 ). Я хочу хешировать его с ~50% столкновением с положительным целым числом того же типа (, то есть между 1 иLong.MAX_VALUE)чистым и эффективным образом.

Мои первые попытки были примерно такими:

  • Math.abs(x) + 1
  • (x & Long.MAX_VALUE) + 1

но у тех и подобных подходов всегда есть проблемы с определенными значениями, т.е. когда xравно 0/Long.MIN_VALUE/Long.MAX_VALUE. Конечно, наивным решением будет использовать 2 оператора if, но я ищу что-то чище/короче/быстрее. Любые идеи?

Примечание :Предположим, что я работаю на Java, где нет неявного преобразования в логическое значение и определена семантика сдвига.

7
задан eold 19 July 2012 в 04:18
поделиться