SloppyMath (Lucene 10.5.0 core API)
Description: declaration: package: org.apache.lucene.util, class: SloppyMath

Package org.apache.lucene.util

# Class SloppyMath

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

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

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SloppyMath()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static double`
  `asin(double a)`
  Returns the arc sine of a value.
  `static double`
  `cos(double a)`
  Returns the trigonometric cosine of an angle.
  `static double`
  `haversinMeters(double sortKey)`
  Returns the Haversine distance in meters between two points given the previous result from `haversinSortKey(double, double, double, double)`
  `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).
  `static double`
  `haversinSortKey(double lat1, double lon1, double lat2, double lon2)`
  Returns a sort key for distance.
  `static double`
  `sin(double a)`
  Returns the trigonometric sine of an angle converted as a cos operation.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## 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:
      - `Math.cos(double)`

  - ### 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:
      - `Math.asin(double)`

  - ### sin

    public static double sin(double a)
    Returns the trigonometric sine of an angle converted as a cos operation.

    Error is around 1E-12.

    Note that this is not quite right... e.g. sin(0) != 0

    Special cases:

    - If the argument is `NaN` or an infinity, then the result is `NaN`.
    Parameters:
      `a` - an angle, in radians.
    Returns:
      the sine of the argument.
    See Also:
      - `Math.sin(double)`