Class NumericUtils

java.lang.Object
io.github.jbellis.jvector.util.NumericUtils

public final class NumericUtils extends Object
Helper APIs to encode numeric values as sortable bytes and vice-versa.

To also index floating point numbers, this class supplies a method to convert them to integer values by changing their bit layout: floatToSortableInt(float). You will have no precision loss by converting floating point numbers to integers and back (only that the integer form is not usable). Other data types like dates can easily converted to longs or ints (e.g. date to long: Date.getTime()).

  • Method Details

    • floatToSortableInt

      public static int floatToSortableInt(float value)
      Converts a float value to a sortable signed int. The value is converted by getting their IEEE 754 floating-point "float format" bit layout and then some bits are swapped, to be able to compare the result as int. By this the precision is not reduced, but the value can easily used as an int. The sort order (including Float.NaN) is defined by Float.compareTo(java.lang.Float); NaN is greater than positive infinity.
      See Also:
    • sortableIntToFloat

      public static float sortableIntToFloat(int encoded)
      Converts a sortable int back to a float.
      See Also:
    • sortableFloatBits

      public static int sortableFloatBits(int bits)
      Converts IEEE 754 representation of a float to sortable order (or back to the original)