How accurate are Horospire's planet positions?
Measured against NASA JPL's DE440 at one moment a day, 1900 to 2050. Version 1.0, 19 October 2026.


Version 1.0: 551,520 placements, one moment a day from 1 January 1900 to 31 December 2050, against JPL DE440s through Skyfield 1.55. Every figure is in summary.csv.
In short
From 1 January 1900 to 31 December 2050, Horospire's positions for the Sun and the planets are on average between 0.15 arcminutes (the Sun) and 0.76 (Saturn) from NASA JPL's, and the Moon's are 1.20 away. An arcminute is a sixtieth of a degree; a zodiac sign spans 1,800 of them.
About one placement in 3,600 lands in a different sign than JPL gives (153 of 551,520), and each time the body stood within a few arcminutes of the sign's edge. Two widely used engines, measured the same way, come much closer.
Accurate positions say nothing about whether astrology is true. This study measures the arithmetic, not the interpretation.
1. The question
How far are the planet positions Horospire computes from NASA JPL's DE440 ephemeris over 1900 to 2050, and how often does the difference change the sign, decan or degree a chart shows?
DE440 is the planetary ephemeris NASA's Jet Propulsion Laboratory published in 2021, fitted to ground-based and spacecraft observations1. It is what this study treats as where the planets were and will be. The site's own test, which holds the engine at 575 moments on every run of its test suite, is on Research and Method; this study is the full measurement behind it.
2. Method
One moment a day for 55,152 days gives 551,520 placements of ten bodies. Each is computed twice, by Horospire's engine and from DE440, and compared. The reference was checked against JPL's Horizons system directly at 15 instants for all ten bodies3: the 150 values agree to within 0.25 arcseconds.
The method at a glance.
| Reference | JPL DE440s, read through Skyfield 1.552. |
|---|---|
| Bodies | The Sun, the Moon and Mercury to Pluto; Mars to Pluto as the centres of mass of their systems, which is what DE440s carries. |
| Years | 1 January 1900 to 31 December 2050, the range the engine is checked for. |
| Sample | One moment a day, the hour stepping by seven and the minute by thirteen each day, so every hour of the day is visited. |
| Time | The civil time a reader enters: before 1972 read as GMT (UT1), from 1972 as UTC. |
| Position | Apparent geocentric ecliptic longitude on the true ecliptic and equinox of date: the tropical zodiac. |
| Error | The shortest angle between the two longitudes: its mean, median, 95th percentile and largest. |
| Engine measured | The Sun by Jean Meeus, Astronomical Algorithms, chapter 25; the Moon by chapter 47, cut to its 13 largest terms6; Mercury to Saturn from Meeus's mean orbital elements, Uranus to Pluto from JPL's approximate elements7, each orbit solved by Kepler's equation and turned to the equinox of date, with the largest Jupiter and Saturn terms from Paul Schlyter8. It reads the civil time as given, with no Delta T. Its code is not published in this version. |
3. Results
Table 1 gives each body's errors over all 55,152 moments. The largest fell on single days: 6.72 arcminutes for Mars on 5 June 2048 and 6.51 for the Moon on 25 November 1999.
Table 1. Horospire's engine against NASA JPL's DE440, in arcminutes, at one moment a day from 1900 to 2050.
| Body | Mean | 95 percent within | Largest | Different sign |
|---|---|---|---|---|
| Sun | 0.15 | 0.35 | 0.54 | 5 of 55,152 |
| Moon | 1.20 | 2.99 | 6.51 | 33 of 55,152 |
| Mercury | 0.42 | 0.82 | 1.41 | 11 of 55,152 |
| Venus | 0.43 | 0.88 | 2.99 | 17 of 55,152 |
| Mars | 0.60 | 2.10 | 6.72 | 12 of 55,152 |
| Jupiter | 0.51 | 1.17 | 2.10 | 12 of 55,152 |
| Saturn | 0.76 | 1.85 | 3.00 | 21 of 55,152 |
| Uranus | 0.75 | 1.84 | 2.40 | 14 of 55,152 |
| Neptune | 0.45 | 1.05 | 1.54 | 9 of 55,152 |
| Pluto | 0.43 | 0.93 | 1.32 | 19 of 55,152 |
The medians, the dates of the largest errors and the decan and degree counts are in summary.csv; every placement's error is in daily-errors.csv.gz.
4. What the error means for a chart
A different sign: 153 of 551,520 placements, about one in 3,600. Each time, JPL had the body within 4.6 arcminutes of the sign's edge for the Moon, 2.3 for Mars and 1.6 or less for the others.
A different decan or degree: a different decan in 477 placements (0.09 percent); a different whole degree in 5,150 (0.93 percent), most often the Moon's (1,049 of its 55,152 days). A chart that prints degrees and minutes will often differ from a professional program in the minutes, and about once in a hundred placements in the degree.
Against the birth time: the Moon moves about half an arcminute for every minute of clock. Its mean error here equals about 2 minutes of birth time, and its largest about 12. A birth time rounded to the nearest five minutes can already move the Moon by more than its mean error, and the Ascendant by about half a degree.
The reading's sign table: for a birth inside the house's table of sign changes by date (Jupiter from 1920, Saturn from 1921, Mercury, Venus and Mars from 1930, each to its last change in 2026), the reading takes Mercury to Saturn from that table rather than from the engine. Each of its 3,580 dates is a real crossing in JPL: 2,845 fall on JPL's date in universal time, 731 a day earlier and 4 a day later. On none of the 182,890 planet-days it covers does the table differ from JPL at noon universal time on a day the reading does not mark as a change of sign.
Table 2. Three engines against NASA JPL's DE440 on the same 551,520 placements, in arcseconds.
| Engine | Sun, mean | Moon, mean | Planets, mean | Largest | Different sign |
|---|---|---|---|---|---|
| Horospire's engine (Meeus series, as of dfb56ab71) | 8.84 | 71.8 | 25.3 to 45.4 | 403 (Mars) | 153 |
| astronomy-engine 2.1.19 (Don Cross, MIT) | 0.47 | 2.10 | 1.41 to 9.21 | 20.6 (Venus) | 14 |
| Swiss Ephemeris 2.10.03, Moshier mode (no ephemeris files) | 0.03 | 0.72 | 0.04 to 0.27 | 5.04 (the Moon) | 0 |
The same moments, reference and method for all three. libraries.csv names each version and the exact call. The Swiss Ephemeris row is its built-in Moshier mode, run with no ephemeris files installed, not its compressed JPL files.
5. Other software, measured the same way
Table 2 puts two engines that other software is built on through the same method.
astronomy-engine, Don Cross's MIT library, says it is "accurate to within ±1 arcminute"4. Measured here, its largest error is 0.34 arcminutes (Venus).
The Swiss Ephemeris, Astrodienst's library, says its compressed files agree "with the JPL Ephemeris to 1 milli-arcsecond (0.001")", and that its built-in Moshier mode's "deviation from JPL is below 1 arc second with the planets and a few arc seconds with the Moon"5. This study ran Moshier mode: the Moon's largest error is 5.0 arcseconds, and the planets' largest 3.0 (Neptune, at a single moment on 30 January 2003; 1.1 or less otherwise).
Horospire's engine is the least precise of the three. Its mean errors run 3 times (Neptune) to 34 times (the Moon) those of astronomy-engine, and about 100 to 600 times those of the Swiss Ephemeris in Moshier mode. In a chart that is the difference between a fraction of an arcminute and a fraction of an arcsecond, beside a sign of 1,800 arcminutes.
6. What accuracy does not show, and the limits
Accurate positions say nothing about whether astrology is true. The study measures where the planets are computed to be, not what a chart is said to mean.
It measures longitude only, as seen from the Earth's centre. For someone standing on the Earth the Moon can sit up to about a degree away (parallax); astrology programs conventionally use the geocentric Moon, and so does this study.
It does not measure the Ascendant, the Midheaven or the houses, which follow the birth time and place; the lunar nodes or Lilith, which are mean elements by definition; or any date outside 1900 to 2050.
A daily sample is still a sample. The means, medians and percentiles are steady; each largest error is the largest found, and a denser sample could find a larger one.
Delta T after today is a prediction, and the programs' predictions differ by about three seconds by 2050, about two arcseconds of the Moon. The sign table is counted in universal days, while a birth date is local, so a time zone can move a crossing to the neighbouring date.
The figures belong to the engine as of commit dfb56ab71. A change to the engine that moves a figure will be a new version, with its own folder.
Downloads and references
Downloads, version 1.0
- summary.csv (2 KB): Horospire's engine, per body: mean, median, 95th percentile, largest and when, signed mean, and the sign, decan and degree counts.
- daily-errors.csv.gz (2.0 MB): Every placement: the civil time, its time scale and the error per body, in arcseconds.
- libraries.csv (8 KB): The three engines, per body, with each version and the exact call.
- horizons-check.csv (10 KB): The reference against JPL Horizons, 150 values.
- ingress-summary.csv (1 KB): The reading's sign-change table against JPL, per planet.
- README.txt (4 KB): What each file holds, and the recipe.
- scripts: astronomy_engine.mjs, horizons_check.py, house_engine.php, house_from_errors.py, reference.py, summarise.py, swiss_ephemeris.py. The code that wrote every file, MIT.
- LICENSE-DATA.txt (1 KB): CC BY 4.0, for the data.
- scripts/LICENSE-CODE.txt (1 KB): MIT, for the scripts.
- SHA256SUMS (1 KB): A checksum for every file.
References
- R. S. Park, W. M. Folkner, J. G. Williams and D. H. Boggs, The JPL Planetary and Lunar Ephemerides DE440 and DE441, The Astronomical Journal 161, 105 (2021). doi.org
- B. Rhodes, Skyfield, version 1.55. rhodesmill.org
- NASA JPL, the Horizons system and its API, which uses DE441. ssd-api.jpl.nasa.gov
- D. Cross, Astronomy Engine, version 2.1.19, its README. github.com
- Astrodienst, Swiss Ephemeris documentation, section 2.1.1, release 2.10.03. astro.com
- Jean Meeus, Astronomical Algorithms, 2nd edition (Willmann-Bell, 1998).
- E. M. Standish, Keplerian Elements for Approximate Positions of the Major Planets, NASA JPL. ssd.jpl.nasa.gov
- Paul Schlyter, How to Compute Planetary Positions. stjarnhimlen.se
7. Reproduce and cite
Every figure here can be rebuilt. The downloads hold the data and the scripts, and README.txt gives the recipe: reference.py computes the reference from DE440s, two scripts run astronomy-engine and the Swiss Ephemeris, and summarise.py writes summary.csv, libraries.csv and daily-errors.csv.gz, which then match the published files byte for byte. Horospire's engine is not published in this version, so house_from_errors.py rebuilds its values from the published errors, and the summary can still be checked. SHA256SUMS holds a checksum for every file.
The data is free to reuse under CC BY 4.0 and the scripts under MIT. To cite it:
Horospire (2026). Horospire planet positions against NASA JPL DE440, 1900 to 2050 (version 1.0) [Data set]. https://horospire.com/research/ephemeris-accuracy
The change log.
| Version | Measured | What changed |
|---|---|---|
| 1.0 | 19 October 2026 | First publication. The 575-moment test in the site's suite reads time the same way from 18 October 2026, which moved three of its figures by 0.01 to 0.02 arcminutes. |
- It measures
- Where the engine puts each body, against NASA JPL
- How often a sign, decan or degree changes
- The reading's sign table, against JPL's crossings
- Two other engines, the same way
- It does not measure
- Whether astrology is true
- What a placement is said to mean
- The houses and the angles
- Any date before 1900 or after 2050