Loading...
Searching...
No Matches
GeographicLib::Math Class Reference

Mathematical functions needed by GeographicLib. More...

`#include <GeographicLib/Math.hpp>`

## Public Types

typedef double | extended
typedef double | real

## Static Public Member Functions

static int | digits ()
static int | set_digits (int ndigits)
static int | digits10 ()
static int | extra_digits ()
template<typename T = real>
static T | pi ()
template<typename T = real>
static T | degree ()
template<typename T >
static T | sq (T x)
template<typename T >
static void | norm (T &x, T &y)
template<typename T >
static T | sum (T u, T v, T &t)
template<typename T >
static T | polyval (int N, const T p[], T x)
template<typename T >
static T | AngNormalize (T x)
template<typename T >
static T | LatFix (T x)
template<typename T >
static T | AngDiff (T x, T y, T &e)
template<typename T >
static T | AngDiff (T x, T y)
template<typename T >
static T | AngRound (T x)
template<typename T >
static void | sincosd (T x, T &sinx, T &cosx)
template<typename T >
static void | sincosde (T x, T t, T &sinx, T &cosx)
template<typename T >
static T | sind (T x)
template<typename T >
static T | cosd (T x)
template<typename T >
static T | tand (T x)
template<typename T >
static T | atan2d (T y, T x)
template<typename T >
static T | atand (T x)
template<typename T >
static T | eatanhe (T x, T es)
template<typename T >
static T | taupf (T tau, T es)
template<typename T >
static T | tauf (T taup, T es)
template<typename T >
static T | hypot3 (T x, T y, T z)
template<typename T = real>
static T | NaN ()
template<typename T = real>
static T | infinity ()
template<typename T >
static T | swab (T x)

## Static Public Attributes

static constexpr int | qd = 90
| degrees per quarter turn
static constexpr int | dm = 60
| minutes per degree
static constexpr int | ms = 60
| seconds per minute
static constexpr int | hd = 2 * qd
| degrees per half turn
static constexpr int | td = 2 * hd
| degrees per turn
static constexpr int | ds = dm * ms
| seconds per degree
static const bool | bigendian = GEOGRAPHICLIB_WORDS_BIGENDIAN

## Detailed Description

Mathematical functions needed by GeographicLib.

Define mathematical functions in order to localize system dependencies and to provide generic versions of the functions. In addition define a real type to be used by GeographicLib.

Example of use:

// Example of using the GeographicLib::Math class
#include <iostream>
#include <exception>
#include <GeographicLib/Math.hpp>
using namespace std;
using namespace GeographicLib;
int main() {
try {
cout << Math::pi() << " " << Math::sq(Math::pi()) << "\n";
}
catch (const exception& e) {
cerr << "Caught exception: " << e.what() << "\n";
return 1;
}
}
main
int main(int argc, const char *const argv[])
Definition CartConvert.cpp:28
Math.hpp
Header for GeographicLib::Math class.
GeographicLib
Namespace for GeographicLib.
Definition Accumulator.cpp:12
std
Definition NearestNeighbor.hpp:806

Definition at line 77 of file Math.hpp.

## Member Typedef Documentation

## extended

typedef double GeographicLib::Math::extended

Definition at line 90 of file Math.hpp.

## real

typedef double GeographicLib::Math::real

Definition at line 110 of file Math.hpp.

## Member Function Documentation

## digits()

int GeographicLib::Math::digits | ( |  | ) |

static

Returns
  the number of bits of precision in a real number.

Definition at line 21 of file Math.cpp.

Referenced by GeographicLib::MGRS::Forward(), GeographicLib::GeodesicExact::GeodesicExact(), and set_digits().

## set_digits()

int GeographicLib::Math::set_digits | ( | int | ndigits | ) |

static

Set the binary precision of a real number.

Parameters

  [in] | ndigits | the number of bits of precision.

Returns
  the resulting number of bits of precision.

This only has an effect when GEOGRAPHICLIB_PRECISION = 5. See also Utility::set_digits for caveats about when this routine should be called.

Definition at line 29 of file Math.cpp.

References digits().

Referenced by GeographicLib::Utility::set_digits().

## digits10()

int GeographicLib::Math::digits10 | ( |  | ) |

static

Returns
  the number of decimal digits of precision in a real number.

Definition at line 38 of file Math.cpp.

Referenced by extra_digits().

## extra_digits()

int GeographicLib::Math::extra_digits | ( |  | ) |

static

Number of additional decimal digits of precision for real relative to double (0 for float).

Definition at line 46 of file Math.cpp.

References digits10().

Referenced by GeographicLib::GeoCoords::DMSRepresentation(), GeographicLib::DMS::Encode(), GeographicLib::GeoCoords::GeoRepresentation(), and main().

## pi()

template<typename T = real>

static T GeographicLib::Math::pi | ( |  | ) |

inline static

Template Parameters

  T | the type of the returned value.

Returns
  π.

Definition at line 199 of file Math.hpp.

Referenced by GeographicLib::EllipticFunction::D(), GeographicLib::EllipticFunction::deltaD(), GeographicLib::EllipticFunction::deltaE(), GeographicLib::EllipticFunction::deltaEinv(), GeographicLib::EllipticFunction::deltaF(), GeographicLib::EllipticFunction::deltaG(), GeographicLib::EllipticFunction::deltaH(), GeographicLib::EllipticFunction::deltaPi(), GeographicLib::EllipticFunction::E(), GeographicLib::EllipticFunction::Einv(), GeographicLib::EllipticFunction::F(), GeographicLib::TransverseMercator::Forward(), GeographicLib::EllipticFunction::G(), GeographicLib::EllipticFunction::H(), GeographicLib::Intersect::Intersect(), GeographicLib::NormalGravity::J2ToFlattening(), GeographicLib::EllipticFunction::Pi(), GeographicLib::AuxLatitude::Rectifying(), GeographicLib::AuxLatitude::RectifyingRadius(), GeographicLib::DST::refine(), GeographicLib::EllipticFunction::Reset(), GeographicLib::TransverseMercator::Reverse(), GeographicLib::EllipticFunction::RF(), GeographicLib::EllipticFunction::RG(), GeographicLib::DST::transform(), and GeographicLib::NormalGravity::V0().

## degree()

template<typename T = real>

static T GeographicLib::Math::degree | ( |  | ) |

inline static

Template Parameters

  T | the type of the returned value.

Returns
  the number of radians in a degree.

Definition at line 209 of file Math.hpp.

Referenced by atan2d(), cosd(), GeographicLib::MagneticModel::FieldComponents(), GeographicLib::AlbersEqualArea::Forward(), GeographicLib::CassiniSoldner::Forward(), GeographicLib::LambertConformalConic::Forward(), GeographicLib::TransverseMercatorExact::Forward(), GeographicLib::Rhumb::GenInverse(), GeographicLib::GeodesicLine::GenPosition(), GeographicLib::GeodesicLineExact::GenPosition(), GeographicLib::RhumbLine::GenPosition(), GeographicLib::AuxAngle::lamd(), GeographicLib::AuxAngle::lamd(), GeographicLib::AlbersEqualArea::Reverse(), GeographicLib::LambertConformalConic::Reverse(), GeographicLib::TransverseMercatorExact::Reverse(), sincosd(), sincosde(), sind(), GeographicLib::GravityModel::SphericalAnomaly(), GeographicLib::experimental::JacobiConformal::x(), and GeographicLib::experimental::JacobiConformal::y().

## sq()

template<typename T >

static T GeographicLib::Math::sq | ( | T | x | ) |

inline static

Square a number.

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x |

Returns
  x2.

Definition at line 221 of file Math.hpp.

Referenced by GeographicLib::AuxLatitude::Authalic(), GeographicLib::AuxLatitude::AuthalicRadiusSquared(), GeographicLib::SphericalEngine::Circle(), GeographicLib::DAuxLatitude::DRectifying(), GeographicLib::MagneticModel::FieldComponents(), GeographicLib::NormalGravity::FlatteningToJ2(), GeographicLib::AlbersEqualArea::Forward(), GeographicLib::LambertConformalConic::Forward(), GeographicLib::PolarStereographic::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::GeodesicLine::GenPosition(), GeographicLib::GeodesicLineExact::GenPosition(), GeographicLib::GravityModel::GravityModel(), GeographicLib::NormalGravity::J2ToFlattening(), GeographicLib::NormalGravity::Phi(), GeographicLib::AuxLatitude::Rectifying(), GeographicLib::AuxLatitude::RectifyingRadius(), GeographicLib::EllipticFunction::Reset(), GeographicLib::AlbersEqualArea::Reverse(), GeographicLib::LambertConformalConic::Reverse(), GeographicLib::PolarStereographic::Reverse(), GeographicLib::TransverseMercator::Reverse(), GeographicLib::EllipticFunction::RG(), GeographicLib::EllipticFunction::RJ(), GeographicLib::AlbersEqualArea::SetScale(), GeographicLib::NormalGravity::SurfaceGravity(), tand(), tauf(), GeographicLib::TransverseMercator::TransverseMercator(), GeographicLib::NormalGravity::V0(), GeographicLib::SphericalEngine::Value(), GeographicLib::experimental::JacobiConformal::x(), GeographicLib::experimental::JacobiConformal::x(), GeographicLib::experimental::JacobiConformal::y(), and GeographicLib::experimental::JacobiConformal::y().

## norm()

template<typename T >

static void GeographicLib::Math::norm | ( | T & | x,
|  | T & | y )

inline static

Normalize a two-vector.

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in,out] | x | on output set to x/hypot(x, y).
  [in,out] | y | on output set to y/hypot(x, y).

Definition at line 231 of file Math.hpp.

Referenced by GeographicLib::CassiniSoldner::Reset().

## sum()

template<typename T >

T GeographicLib::Math::sum | ( | T | u,
|  | T | v,
|  | T & | t )

static

The error-free sum of two numbers.

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | u |
  [in] | v |
  [out] | t | the exact error given by (u + v) - s.

Returns
  s = round(u + v).

See D. E. Knuth, TAOCP, Vol 2, 4.2.2, Theorem B.

Note
  t can be the same as one of the first two arguments.

Definition at line 52 of file Math.cpp.

References GEOGRAPHICLIB_VOLATILE.

Referenced by AngDiff().

## polyval()

template<typename T >

static T GeographicLib::Math::polyval | ( | int | N,
|  | const T | p[],
|  | T | x )

inline static

Evaluate a polynomial.

Template Parameters

  T | the type of the arguments and returned value.

Parameters

  [in] | N | the order of the polynomial.
  [in] | p | the coefficient array (of size N + 1) with p0 being coefficient of xN.
  [in] | x | the variable.

Returns
  the value of the polynomial.

Evaluate ∑n=0..N pn xN−n. Return 0 if N < 0. Return p0, if N = 0 (even if x is infinite or a nan). The evaluation uses Horner's method.

Definition at line 280 of file Math.hpp.

Referenced by GeographicLib::AuxLatitude::AuthalicRadiusSquared(), GeographicLib::AuxLatitude::RectifyingRadius(), and GeographicLib::TransverseMercator::TransverseMercator().

## AngNormalize()

template<typename T >

T GeographicLib::Math::AngNormalize | ( | T | x | ) |

static

Normalize an angle.

Template Parameters

  T | the type of the argument and returned value.

Parameters

  [in] | x | the angle in degrees.

Returns
  the angle reduced to the range [−180°, 180°].

The range of x is unrestricted. If the result is ±0° or ±180° then the sign is the sign of x.

Definition at line 66 of file Math.cpp.

References hd, and td.

Referenced by GeographicLib::Geoid::CacheArea(), GeographicLib::DMS::DecodeAzimuth(), GeographicLib::EllipticFunction::Ed(), GeographicLib::DMS::Encode(), GeographicLib::CassiniSoldner::Forward(), GeographicLib::GARS::Forward(), GeographicLib::Geohash::Forward(), GeographicLib::Georef::Forward(), GeographicLib::PolarStereographic::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::Geodesic::GenDirectLine(), GeographicLib::GeodesicExact::GenDirectLine(), GeographicLib::GeodesicLine::GenPosition(), GeographicLib::GeodesicLineExact::GenPosition(), GeographicLib::RhumbLine::GenPosition(), GeographicLib::GeodesicLine::GeodesicLine(), GeographicLib::GeodesicLineExact::GeodesicLineExact(), GeographicLib::LocalCartesian::Reset(), GeographicLib::AlbersEqualArea::Reverse(), GeographicLib::LambertConformalConic::Reverse(), GeographicLib::PolarStereographic::Reverse(), GeographicLib::TransverseMercator::Reverse(), GeographicLib::TransverseMercatorExact::Reverse(), and GeographicLib::UTMUPS::StandardZone().

## LatFix()

template<typename T >

static T GeographicLib::Math::LatFix | ( | T | x | ) |

inline static

Normalize a latitude.

Template Parameters

  T | the type of the argument and returned value.

Parameters

  [in] | x | the angle in degrees.

Returns
  x if it is in the range [−90°, 90°], otherwise return NaN.

Definition at line 309 of file Math.hpp.

Referenced by GeographicLib::Geoid::CacheArea(), GeographicLib::AlbersEqualArea::Forward(), GeographicLib::LambertConformalConic::Forward(), GeographicLib::PolarStereographic::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::TransverseMercatorExact::Forward(), GeographicLib::LocalCartesian::Reset(), and GeographicLib::NormalGravity::SurfaceGravity().

## AngDiff() [1/2]

template<typename T >

T GeographicLib::Math::AngDiff | ( | T | x,
|  | T | y,
|  | T & | e )

static

The exact difference of two angles reduced to [−180°, 180°].

Template Parameters

  T | the type of the arguments and returned value.

Parameters

  [in] | x | the first angle in degrees.
  [in] | y | the second angle in degrees.
  [out] | e | the error term in degrees.

Returns
  d, the truncated value of y − x.

This computes z = y − x exactly, reduced to [−180°, 180°]; and then sets z = d + e where d is the nearest representable number to z and e is the truncation error. If z = ±0° or ±180°, then the sign of d is given by the sign of y − x. The maximum absolute value of e is 2−26 (for doubles).

Definition at line 77 of file Math.cpp.

References hd, sum(), and td.

Referenced by GeographicLib::AlbersEqualArea::Forward(), GeographicLib::CassiniSoldner::Forward(), GeographicLib::LambertConformalConic::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::TransverseMercatorExact::Forward(), GeographicLib::UTMUPS::Forward(), and GeographicLib::Rhumb::GenInverse().

## AngDiff() [2/2]

template<typename T >

static T GeographicLib::Math::AngDiff | ( | T | x,
|  | T | y )

inline static

Difference of two angles reduced to [−180°, 180°]

Template Parameters

  T | the type of the arguments and returned value.

Parameters

  [in] | x | the first angle in degrees.
  [in] | y | the second angle in degrees.

Returns
  y − x, reduced to the range [−180°, 180°].

The result is equivalent to computing the difference exactly, reducing it to [−180°, 180°] and rounding the result.

Definition at line 343 of file Math.hpp.

## AngRound()

template<typename T >

T GeographicLib::Math::AngRound | ( | T | x | ) |

static

Coarsen a value close to zero.

Template Parameters

  T | the type of the argument and returned value.

Parameters

  [in] | x |

Returns
  the coarsened value.

The makes the smallest gap in x = 1/16 − nextafter(1/16, 0) = 1/257 for doubles = 0.8 pm on the earth if x is an angle in degrees. (This is about 2000 times more resolution than we get with angles around 90°.) We use this to avoid having to deal with near singular cases when x is non-zero but tiny (e.g., 10−200). This sign of ±0 is preserved.

Definition at line 92 of file Math.cpp.

References GEOGRAPHICLIB_VOLATILE.

Referenced by GeographicLib::Geodesic::GenDirectLine(), GeographicLib::GeodesicExact::GenDirectLine(), GeographicLib::GeodesicLine::GeodesicLine(), GeographicLib::GeodesicLineExact::GeodesicLineExact(), and sincosde().

## sincosd()

template<typename T >

void GeographicLib::Math::sincosd | ( | T | x,
|  | T & | sinx,
|  | T & | cosx )

static

Evaluate the sine and cosine function with the argument in degrees

Template Parameters

  T | the type of the arguments.

Parameters

  [in] | x | in degrees.
  [out] | sinx | sin(x).
  [out] | cosx | cos(x).

The results obey exactly the elementary properties of the trigonometric functions, e.g., sin 9° = cos 81° = − sin 123456789°. If x = −0 or a negative multiple of 180°, then sinx = −0; this is the only case where −0 is returned.

Definition at line 101 of file Math.cpp.

References degree(), and qd.

Referenced by GeographicLib::AlbersEqualArea::AlbersEqualArea(), GeographicLib::AlbersEqualArea::AlbersEqualArea(), GeographicLib::AuxAngle::degrees(), GeographicLib::EllipticFunction::Ed(), GeographicLib::MagneticCircle::FieldGeocentric(), GeographicLib::AlbersEqualArea::Forward(), GeographicLib::AzimuthalEquidistant::Forward(), GeographicLib::CassiniSoldner::Forward(), GeographicLib::Gnomonic::Forward(), GeographicLib::LambertConformalConic::Forward(), GeographicLib::PolarStereographic::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::Geodesic::GenDirectLine(), GeographicLib::GeodesicExact::GenDirectLine(), GeographicLib::GeodesicLine::GenPosition(), GeographicLib::GeodesicLineExact::GenPosition(), GeographicLib::GeodesicLine::GeodesicLine(), GeographicLib::GeodesicLineExact::GeodesicLineExact(), GeographicLib::LambertConformalConic::LambertConformalConic(), GeographicLib::LambertConformalConic::LambertConformalConic(), GeographicLib::CassiniSoldner::Reset(), GeographicLib::LocalCartesian::Reset(), tand(), GeographicLib::experimental::JacobiConformal::x(), and GeographicLib::experimental::JacobiConformal::y().

## sincosde()

template<typename T >

void GeographicLib::Math::sincosde | ( | T | x,
|  | T | t,
|  | T & | sinx,
|  | T & | cosx )

static

Evaluate the sine and cosine with reduced argument plus correction

Template Parameters

  T | the type of the arguments.

Parameters

  [in] | x | reduced angle in degrees.
  [in] | t | correction in degrees.
  [out] | sinx | sin(x + t).
  [out] | cosx | cos(x + t).

This is a variant of Math::sincosd allowing a correction to the angle to be supplied. x must be in [−180°, 180°] and t is assumed to be a small correction. Math::AngRound is applied to the reduced angle to prevent problems with x + t being extremely close but not exactly equal to one of the four cardinal directions.

Definition at line 128 of file Math.cpp.

References AngRound(), degree(), and qd.

## sind()

template<typename T >

T GeographicLib::Math::sind | ( | T | x | ) |

static

Evaluate the sine function with the argument in degrees

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x | in degrees.

Returns
  sin(x).

The result is +0 for x = +0 and positive multiples of 180°. The result is −0 for x = -0 and negative multiples of 180°.

Definition at line 157 of file Math.cpp.

References degree(), and qd.

Referenced by GeographicLib::NormalGravity::SurfaceGravity().

## cosd()

template<typename T >

T GeographicLib::Math::cosd | ( | T | x | ) |

static

Evaluate the cosine function with the argument in degrees

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x | in degrees.

Returns
  cos(x).

The result is +0 for x an odd multiple of 90°.

Definition at line 173 of file Math.cpp.

References degree(), and qd.

## tand()

template<typename T >

T GeographicLib::Math::tand | ( | T | x | ) |

static

Evaluate the tangent function with the argument in degrees

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x | in degrees.

Returns
  tan(x).

If x is an odd multiple of 90°, then a suitably large (but finite) value is returned.

Definition at line 188 of file Math.cpp.

References sincosd(), and sq().

Referenced by GeographicLib::PolarStereographic::Forward(), and GeographicLib::TransverseMercatorExact::Forward().

## atan2d()

template<typename T >

T GeographicLib::Math::atan2d | ( | T | y,
|  | T | x )

static

Evaluate the atan2 function with the result in degrees

Template Parameters

  T | the type of the arguments and the returned value.

Parameters

  [in] | y |
  [in] | x |

Returns
  atan2(y, x) in degrees.

The result is in the range [−180° 180°]. N.B., atan2d(±0, −1) = ±180°.

Definition at line 199 of file Math.cpp.

References degree(), hd, qd, and std::swap().

Referenced by atand(), GeographicLib::AuxAngle::degrees(), GeographicLib::MagneticModel::FieldComponents(), GeographicLib::TransverseMercator::Forward(), GeographicLib::Geodesic::GenInverse(), GeographicLib::GeodesicExact::GenInverse(), GeographicLib::Rhumb::GenInverse(), GeographicLib::GeodesicLine::GenPosition(), GeographicLib::GeodesicLineExact::GenPosition(), GeographicLib::Geodesic::InverseLine(), GeographicLib::GeodesicExact::InverseLine(), GeographicLib::AzimuthalEquidistant::Reverse(), GeographicLib::Gnomonic::Reverse(), GeographicLib::PolarStereographic::Reverse(), and GeographicLib::TransverseMercator::Reverse().

## atand()

template<typename T >

T GeographicLib::Math::atand | ( | T | x | ) |

static

Evaluate the atan function with the result in degrees

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x |

Returns
  atan(x) in degrees.

Definition at line 218 of file Math.cpp.

References atan2d().

Referenced by GeographicLib::AlbersEqualArea::Reverse(), GeographicLib::LambertConformalConic::Reverse(), GeographicLib::PolarStereographic::Reverse(), and GeographicLib::TransverseMercator::Reverse().

## eatanhe()

template<typename T >

T GeographicLib::Math::eatanhe | ( | T | x,
|  | T | es )

static

Evaluate e atanh(e x)

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x |
  [in] | es | the signed eccentricity = sign(e2) sqrt(|e2|)

Returns
  e atanh(e x)

If e2 is negative (e is imaginary), the expression is evaluated in terms of atan.

Definition at line 221 of file Math.cpp.

Referenced by GeographicLib::LambertConformalConic::Forward(), tauf(), and taupf().

## taupf()

template<typename T >

T GeographicLib::Math::taupf | ( | T | tau,
|  | T | es )

static

tanχ in terms of tanφ

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | tau | τ = tanφ
  [in] | es | the signed eccentricity = sign(e2) sqrt(|e2|)

Returns
  τ′ = tanχ

See Eqs. (7–9) of C. F. F. Karney, Transverse Mercator with an accuracy of a few nanometers, J. Geodesy 85(8), 475–485 (Aug. 2011) (preprint arXiv:1002.1417).

Definition at line 225 of file Math.cpp.

References eatanhe().

Referenced by GeographicLib::PolarStereographic::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::TransverseMercatorExact::Forward(), and tauf().

## tauf()

template<typename T >

T GeographicLib::Math::tauf | ( | T | taup,
|  | T | es )

static

tanφ in terms of tanχ

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | taup | τ′ = tanχ
  [in] | es | the signed eccentricity = sign(e2) sqrt(|e2|)

Returns
  τ = tanφ

See Eqs. (19–21) of C. F. F. Karney, Transverse Mercator with an accuracy of a few nanometers, J. Geodesy 85(8), 475–485 (Aug. 2011) (preprint arXiv:1002.1417).

Definition at line 235 of file Math.cpp.

References eatanhe(), GEOGRAPHICLIB_PANIC, sq(), and taupf().

Referenced by GeographicLib::TransverseMercatorExact::Forward(), GeographicLib::LambertConformalConic::Reverse(), GeographicLib::PolarStereographic::Reverse(), GeographicLib::TransverseMercator::Reverse(), and GeographicLib::TransverseMercatorExact::Reverse().

## hypot3()

template<typename T >

T GeographicLib::Math::hypot3 | ( | T | x,
|  | T | y,
|  | T | z )

static

Implement hypot with 3 parameters

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x |
  [in] | y |
  [in] | z |

Returns
  sqrt(x2 + y2 + z2).

Definition at line 269 of file Math.cpp.

## NaN()

template<typename T >

T GeographicLib::Math::NaN | ( |  | ) |

static

The NaN (not a number)

Template Parameters

  T | the type of the returned value.

Returns
  NaN if available, otherwise return the max real of type T.

Definition at line 277 of file Math.cpp.

Referenced by GeographicLib::GravityModel::Circle(), GeographicLib::PolygonAreaT< GeodType >::Clear(), GeographicLib::Gnomonic::Forward(), GeographicLib::UTMUPS::Forward(), GeographicLib::GeodesicLine::GenPosition(), GeographicLib::GeodesicLineExact::GenPosition(), GeographicLib::RhumbLine::GenPosition(), GeographicLib::OSGB::GridReference(), GeographicLib::NormalGravity::J2ToFlattening(), main(), GeographicLib::AuxAngle::NaN(), GeographicLib::GARS::Reverse(), GeographicLib::Geohash::Reverse(), GeographicLib::Georef::Reverse(), GeographicLib::Gnomonic::Reverse(), GeographicLib::MGRS::Reverse(), GeographicLib::UTMUPS::Reverse(), GeographicLib::GeodesicLine::SetArc(), GeographicLib::GeodesicLineExact::SetArc(), and GeographicLib::PolygonAreaT< GeodType >::TestEdge().

## infinity()

template<typename T >

T GeographicLib::Math::infinity | ( |  | ) |

static

Infinity

Template Parameters

  T | the type of the returned value.

Returns
  infinity if available, otherwise return the max real.

Definition at line 289 of file Math.cpp.

Referenced by GeographicLib::EllipticFunction::Reset().

## swab()

template<typename T >

static T GeographicLib::Math::swab | ( | T | x | ) |

inline static

Swap the bytes of a quantity

Template Parameters

  T | the type of the argument and the returned value.

Parameters

  [in] | x |

Returns
  x with its bytes swapped.

Definition at line 538 of file Math.hpp.

References std::swap().

## Member Data Documentation

## qd

int GeographicLib::Math::qd = 90

static constexpr

degrees per quarter turn

The constants defining the standard (Babylonian) meanings of degrees, minutes, and seconds, for angles. Read the constants as follows (for example): ms = 60 is the ratio 1 minute / 1 second. The abbreviations are

- t a whole turn (360°)
- h a half turn (180°)
- q a quarter turn (a right angle = 90°)
- d a degree
- m a minute
- s a second

Note that degree() is ratio 1 degree / 1 radian, thus, for example, Math::degree() * Math::qd is the ratio 1 quarter turn / 1 radian = π/2.

Defining all these in one place would mean that it's simple to convert to the centesimal system for measuring angles. The DMS class assumes that Math::dm and Math::ms are less than or equal to 100 (so that two digits suffice for the integer parts of the minutes and degrees components of an angle). Switching to the centesimal convention will break most of the tests. Also the normal definition of degree is baked into some classes, e.g., UTMUPS, MGRS, Georef, Geohash, etc.

Definition at line 145 of file Math.hpp.

Referenced by GeographicLib::AlbersEqualArea::AlbersEqualArea(), GeographicLib::AlbersEqualArea::AlbersEqualArea(), GeographicLib::AlbersEqualArea::AlbersEqualArea(), atan2d(), cosd(), GeographicLib::DMS::DecodeLatLon(), GeographicLib::CassiniSoldner::Forward(), GeographicLib::GARS::Forward(), GeographicLib::Geohash::Forward(), GeographicLib::Georef::Forward(), GeographicLib::PolarStereographic::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::TransverseMercatorExact::Forward(), GeographicLib::UTMUPS::Forward(), GeographicLib::RhumbLine::GenPosition(), GeographicLib::LambertConformalConic::LambertConformalConic(), GeographicLib::LambertConformalConic::LambertConformalConic(), GeographicLib::LambertConformalConic::LambertConformalConic(), main(), GeographicLib::CassiniSoldner::Reverse(), GeographicLib::Geohash::Reverse(), GeographicLib::MGRS::Reverse(), GeographicLib::TransverseMercator::Reverse(), GeographicLib::TransverseMercatorExact::Reverse(), GeographicLib::AlbersEqualArea::SetScale(), GeographicLib::LambertConformalConic::SetScale(), GeographicLib::PolarStereographic::SetScale(), sincosd(), sincosde(), and sind().

## dm

int GeographicLib::Math::dm = 60

static constexpr

minutes per degree

Definition at line 146 of file Math.hpp.

Referenced by GeographicLib::DMS::Encode().

## ms

int GeographicLib::Math::ms = 60

static constexpr

seconds per minute

Definition at line 147 of file Math.hpp.

Referenced by GeographicLib::DMS::Encode().

## hd

int GeographicLib::Math::hd = 2 * qd

static constexpr

degrees per half turn

Definition at line 148 of file Math.hpp.

Referenced by AngDiff(), AngNormalize(), atan2d(), GeographicLib::GARS::Forward(), GeographicLib::Geohash::Forward(), GeographicLib::TransverseMercator::Forward(), GeographicLib::TransverseMercatorExact::Forward(), GeographicLib::RhumbLine::GenPosition(), GeographicLib::Geoid::Geoid(), GeographicLib::Geohash::Reverse(), GeographicLib::TransverseMercator::Reverse(), GeographicLib::TransverseMercatorExact::Reverse(), and GeographicLib::UTMUPS::StandardZone().

## td

int GeographicLib::Math::td = 2 * hd

static constexpr

degrees per turn

Definition at line 149 of file Math.hpp.

Referenced by AngDiff(), AngNormalize(), GeographicLib::Geoid::CacheArea(), GeographicLib::AuxLatitude::Convert(), GeographicLib::EllipticFunction::Ed(), GeographicLib::DMS::Encode(), GeographicLib::Geoid::Geoid(), and GeographicLib::GARS::Reverse().

## ds

int GeographicLib::Math::ds = dm * ms

static constexpr

seconds per degree

Definition at line 150 of file Math.hpp.

Referenced by GeographicLib::DMS::Encode().

## bigendian

const bool GeographicLib::Math::bigendian = GEOGRAPHICLIB_WORDS_BIGENDIAN

static

true if the machine is big-endian.

Definition at line 193 of file Math.hpp.

The documentation for this class was generated from the following files:

- Math.hpp
- Math.cpp