Class SloppyMath

java.lang.Object
org.apache.lucene.util.SloppyMath

public class SloppyMath extends Object
Math functions that trade off accuracy for speed.
  • Field Details

    • TO_METERS

      private static final double TO_METERS
      See Also:
    • ONE_DIV_F2

      private static final double ONE_DIV_F2
      See Also:
    • ONE_DIV_F3

      private static final double ONE_DIV_F3
      See Also:
    • ONE_DIV_F4

      private static final double ONE_DIV_F4
      See Also:
    • PIO2_HI

      private static final double PIO2_HI
    • PIO2_LO

      private static final double PIO2_LO
    • TWOPI_HI

      private static final double TWOPI_HI
    • TWOPI_LO

      private static final double TWOPI_LO
    • SIN_COS_TABS_SIZE

      private static final int SIN_COS_TABS_SIZE
      See Also:
    • SIN_COS_DELTA_HI

      private static final double SIN_COS_DELTA_HI
    • SIN_COS_DELTA_LO

      private static final double SIN_COS_DELTA_LO
    • SIN_COS_INDEXER

      private static final double SIN_COS_INDEXER
    • sinTab

      private static final double[] sinTab
    • cosTab

      private static final double[] cosTab
    • SIN_COS_MAX_VALUE_FOR_INT_MODULO

      static final double SIN_COS_MAX_VALUE_FOR_INT_MODULO
    • ASIN_MAX_VALUE_FOR_TABS

      private static final double ASIN_MAX_VALUE_FOR_TABS
    • ASIN_TABS_SIZE

      private static final int ASIN_TABS_SIZE
      See Also:
    • ASIN_DELTA

      private static final double ASIN_DELTA
    • ASIN_INDEXER

      private static final double ASIN_INDEXER
    • asinTab

      private static final double[] asinTab
    • asinDer1DivF1Tab

      private static final double[] asinDer1DivF1Tab
    • asinDer2DivF2Tab

      private static final double[] asinDer2DivF2Tab
    • asinDer3DivF3Tab

      private static final double[] asinDer3DivF3Tab
    • asinDer4DivF4Tab

      private static final double[] asinDer4DivF4Tab
    • ASIN_PIO2_HI

      private static final double ASIN_PIO2_HI
    • ASIN_PIO2_LO

      private static final double ASIN_PIO2_LO
    • ASIN_PS0

      private static final double ASIN_PS0
    • ASIN_PS1

      private static final double ASIN_PS1
    • ASIN_PS2

      private static final double ASIN_PS2
    • ASIN_PS3

      private static final double ASIN_PS3
    • ASIN_PS4

      private static final double ASIN_PS4
    • ASIN_PS5

      private static final double ASIN_PS5
    • ASIN_QS1

      private static final double ASIN_QS1
    • ASIN_QS2

      private static final double ASIN_QS2
    • ASIN_QS3

      private static final double ASIN_QS3
    • ASIN_QS4

      private static final double ASIN_QS4
  • Constructor Details

    • SloppyMath

      public SloppyMath()
  • Method Details

    • haversinMeters

      public static double haversinMeters(double lat1, double lon1, double lat2, double lon2)
      Returns the Haversine distance in meters between two points specified in decimal degrees (latitude/longitude). This works correctly even if the dateline is between the two points.

      Error is at most 4E-1 (40cm) from the actual haversine distance, but is typically much smaller for reasonable distances: around 1E-5 (0.01mm) for distances less than 1000km.

      Parameters:
      lat1 - Latitude of the first point.
      lon1 - Longitude of the first point.
      lat2 - Latitude of the second point.
      lon2 - Longitude of the second point.
      Returns:
      distance in meters.
    • haversinMeters

      public static double haversinMeters(double sortKey)
      Returns the Haversine distance in meters between two points given the previous result from haversinSortKey(double, double, double, double)
      Returns:
      distance in meters.
    • haversinSortKey

      public static double haversinSortKey(double lat1, double lon1, double lat2, double lon2)
      Returns a sort key for distance. This is less expensive to compute than haversinMeters(double, double, double, double), but it always compares the same. This can be converted into an actual distance with haversinMeters(double), which effectively does the second half of the computation.
    • cos

      public static double cos(double a)
      Returns the trigonometric cosine of an angle.

      Error is around 1E-15.

      Special cases:

      • If the argument is NaN or an infinity, then the result is NaN.
      Parameters:
      a - an angle, in radians.
      Returns:
      the cosine of the argument.
      See Also:
    • asin

      public static double asin(double a)
      Returns the arc sine of a value.

      The returned angle is in the range -pi/2 through pi/2. Error is around 1E-7.

      Special cases:

      • If the argument is NaN or its absolute value is greater than 1, then the result is NaN.
      Parameters:
      a - the value whose arc sine is to be returned.
      Returns:
      arc sine of the argument
      See Also: