Нет ничего проще, чем это. Работает на любое неотрицательное число. С небольшими изменениями могут поддерживаться также отрицательные целые числа.
double hash(int val)
{
return val / ((double)INT_MAX / 2.0) - 1.0;
}
РЕДАКТИРОВАТЬ: Это должно работать для всех чисел (положительных и отрицательных):
double hash(int val)
{
return val / (double)INT_MAX;
}
Да, это так же тривиально, как выглядит (будет точнее, если вы используете -INT_MIN
для отрицательных чисел).