Это похоже на проблему хеширования функций и строк.Учитывая, что размер точности с плавающей запятой меньше, чем поддерживаемый типом int, вы неизбежно столкнетесь с коллизиями.
Математически правильный путь заключается в следующем:
f(х) = 0, где х = 0;f (x) = 1 / x, где x> 0 и x
В противном случае вы пытаетесь вписать больше значений, чем можете, чтоневозможно.
В качестве альтернативы (так как вы имеете дело с графикой), если вы хотите обработать весь диапазон целых чисел, и вы могли бы жить с округлением 2 близких целых до одного и того же значения, вы можете разделитьзначение на 2 (или на 3 или на сколько вы хотите), чтобы уменьшить, чтобы соответствовать всему необходимому диапазону int.Деление на 2 удвоит поддерживаемый диапазон.
Таким образом, 16000 и 16001 получат 1/8000.
Я полагаю, это зависит от вашей ситуации, но вы не можете разместить 1 миллион человек на стадионе на 500 000 мест и ожидать, что у каждого будет уникальный номер места ... у вас будут столкновения.