Class Interpolation


  • final class Interpolation
    extends java.lang.Object
    Support class for interpolation.
    Since:
    1.1
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private static double HALF
      0.5.
      private static double TWO_POW_63
      2^63.
      private static long UNSIGNED_2_POW_53
      The value 2^53 converted for comparison as an unsigned integer.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private Interpolation()
      No instances.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      (package private) static double interpolate​(double a, double b, double t)
      Linear interpolation between sorted values a <= b using the interpolant t taking care to avoid overflow.
      (package private) static StatisticResult interpolate​(long a, long b, double t)
      Linear interpolation between sorted values a <= b using the interpolant t.
      (package private) static double mean​(double x, double y)
      Compute the arithmetic mean of the two values taking care to avoid overflow.
      (package private) static double mean​(int x, int y)
      Compute the arithmetic mean of the two values.
      (package private) static StatisticResult mean​(long x, long y)
      Compute the arithmetic mean of the two values.
      (package private) static double meanAsDouble​(long x, long y)
      Compute the arithmetic mean of the two values as a double.
      (package private) static long meanAsLong​(long x, long y)
      Compute the arithmetic mean of the two values as a long.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • UNSIGNED_2_POW_53

        private static final long UNSIGNED_2_POW_53
        The value 2^53 converted for comparison as an unsigned integer.
        See Also:
        Constant Field Values
    • Constructor Detail

      • Interpolation

        private Interpolation()
        No instances.
    • Method Detail

      • mean

        static double mean​(double x,
                           double y)
        Compute the arithmetic mean of the two values taking care to avoid overflow.
        Parameters:
        x - Value.
        y - Value.
        Returns:
        the mean
      • mean

        static double mean​(int x,
                           int y)
        Compute the arithmetic mean of the two values.
        Parameters:
        x - Value.
        y - Value.
        Returns:
        the mean
      • meanAsDouble

        static double meanAsDouble​(long x,
                                   long y)
        Compute the arithmetic mean of the two values as a double.
        Parameters:
        x - Value.
        y - Value.
        Returns:
        the mean
      • meanAsLong

        static long meanAsLong​(long x,
                               long y)
        Compute the arithmetic mean of the two values as a long.

        The result value is the nearest whole number to the result, with ties rounding towards positive infinity. This is equivalent to the ceiling average.

        Parameters:
        x - Value.
        y - Value.
        Returns:
        the mean
      • mean

        static StatisticResult mean​(long x,
                                    long y)
        Compute the arithmetic mean of the two values.

        The result long value is the nearest whole number to the result, with ties rounding towards positive infinity. This is equivalent to the ceiling average.

        Parameters:
        x - Value.
        y - Value.
        Returns:
        the mean
      • interpolate

        static double interpolate​(double a,
                                  double b,
                                  double t)
        Linear interpolation between sorted values a <= b using the interpolant t taking care to avoid overflow.
         value = a + t * (b - a)
         

        Note

        This function has the same properties of as the C++ function std::lerp for t in (0, 1) and b >= a. It is not a full implementation as it removes explicit checks for t==0 and t==1 and does not support extrapolation as the usage is intended for interpolation of sorted values. The function is monotonic and avoids overflow for finite a and b.

        Interpolation between equal signed infinity arguments will return a. Alternative implementations may return NaN for this case. Thus this method interprets infinity values as equivalent and avoids interpolation.

        Parameters:
        a - Min value.
        b - Max value.
        t - Interpolant in (0, 1).
        Returns:
        the value
      • interpolate

        static StatisticResult interpolate​(long a,
                                           long b,
                                           double t)
        Linear interpolation between sorted values a <= b using the interpolant t.
         value = a + t * (b - a)
         

        The long value is the nearest whole number to the result, with ties rounding towards positive infinity. This value will be in [a, b].

        The double value is computed within 1 ULP of the exact result. In some cases this may be outside the range [a, b] due to rounding to a 53-bit representation.

        Note

        This function does not support extrapolation as the usage is intended for interpolation of sorted values.

        Parameters:
        a - Min value.
        b - Max value.
        t - Interpolant in [0, 1].
        Returns:
        the value