Planetary Ephemerides

Approximate heliocentric position and velocity of a planet.



Modified Julian Date (JD2400000.5)




  1 = Mercury

  2 = Venus

  3 = Earth-Moon Barycentre

  4 = Mars

  5 = Jupiter

  6 = Saturn

  7 = Uranus

  8 = Neptune

  9 = Pluto




heliocentric [x, y, z, , , ż], equatorial, J2000

  (AU, AU/s)




  +1 = warning: date outside of range

   0 = OK

  1 = illegal NP (outside 1-9)

  2 = solution didn’t converge

The epoch, DATE, is in the TDB time scale and is in the form of a Modified Julian Date (JD2400000.5).
The reference frame is equatorial and is with respect to the mean equinox and ecliptic of epoch J2000.
If a planet number, NP, outside the range 1-9 is supplied, an error status is returned (JSTAT =  1) and the PV vector is set to zeroes.
The algorithm for obtaining the mean elements of the planets from Mercury to Neptune is due to J. L. Simon, P. Bretagnon, J. Chapront, M. Chapront-Touze, G. Francou and J. Laskar (Bureau des Longitudes, Paris, France). The (completely different) algorithm for calculating the ecliptic coordinates of Pluto is by Meeus.
Comparisons of the present routine with the JPL DE200 ephemeris give the following RMS errors over the interval 1960-2025:
position (km) speed (metre/sec)
Mercury    334    0.437
Venus   1060    0.855
EMB   2010    0.815
Mars   7690    1.98
Jupiter   71700    7.70
Saturn 199000    19.4
Uranus 564000    16.4
Neptune 158000    14.4
Pluto   36400    0.137

From comparisons with DE102, Simon et al. quote the following longitude accuracies over the interval 1800-2200:

Mercury 4
Venus 5
Mars 17
Jupiter 71
Saturn 81
Uranus 86
Neptune 11

In the case of Pluto, Meeus quotes an accuracy of ′′06 in longitude and ′′02 in latitude for the period 1885-2099.

For all except Pluto, over the period 1000-3000, the accuracy is better than 1.5 times that over 1800-2200. Outside the interval 1000-3000 the accuracy declines. For Pluto the accuracy declines rapidly outside the period 1885-2099. Outside these ranges (1885-2099 for Pluto, 1000-3000 for the rest) a “date out of range” warning status (JSTAT=+1) is returned.

The algorithms for (i) Mercury through Neptune and (ii) Pluto are completely independent. In the Mercury through Neptune case, the present SLALIB implementation differs from the original Simon et al. Fortran code in the following respects:
  • The date is supplied as a Modified Julian Date rather a Julian Date (MJD = (JD 2400000.5).
  • The result is returned only in equatorial Cartesian form; the ecliptic longitude, latitude and radius vector are not returned.
  • The velocity is in AU per second, not AU per day.
  • Different error/warning status values are used.
  • Kepler’s Equation is not solved inline.
  • Polynomials in T are nested to minimize rounding errors.
  • Explicit double-precision constants are used to avoid mixed-mode expressions.
  • There are other, cosmetic, changes to comply with Starlink/SLALIB style guidelines.

None of the above changes affects the result significantly.

For NP = 3 the result is for the Earth-Moon Barycentre. To obtain the heliocentric position and velocity of the Earth, either use the SLALIB routine sla_EVP (or sla_EPV) or call sla_DMOON and subtract 0.012150581 times the geocentric Moon vector from the EMB vector produced by the present routine. (The Moon vector should be precessed to J2000 first, but this can be omitted for modern epochs without introducing significant inaccuracy.)
Simon et al., Astron. Astrophys. 282, 663 (1994).
Meeus, J., Astronomical Algorithms, Willmann-Bell (1991).