Celestine accuracy
Celestine finds all 50 solar and lunar eclipses of 2020–2030 in the NASA Five Millennium Canon; the worst greatest-eclipse time differs by 17.1 s. Against JPL Horizons, Sun through Pluto stay within 4.64″ in longitude (worst: Neptune) and the Moon within 7.58″. Ascendant and MC match ERFA within 0.0011″.
Summary
| Area / reference | Worst residual |
|---|---|
| Eclipses vs NASA canon | 50/50, 17.1 s |
| Sun–Pluto vs Horizons | 4.64″ (Neptune) |
| Moon vs Horizons | 7.58″ |
| Chiron precise vs Horizons | 0.402″ |
| Mean node vs ERFA faom03 | 0.124″ |
| ASC/MC vs ERFA | 0.0011″ |
| ΔT 1955–2026 vs USNO tables | 0.104 s |
| Lunar phases vs USNO | 59.7 s |
| Sign ingresses vs Horizons (excluding Pluto) | 41.6 min |
Eclipses
NASA Five Millennium solar and lunar canons, greatest-eclipse instants in TT, 2020-01-01 inclusive through 2031-01-01 exclusive. Each reference is matched once to the nearest same-kind event within one day. Residuals compare TT directly, without applying NASA’s ΔT to civil times.
| Kind | Canon / found | Type agrees | Max / median (s) | Magnitude max |Δ| | Umbral max |Δ| | Penumbral max |Δ| |
|---|---|---|---|---|---|---|
| solar | 24 / 24 | 24/24 | 17.1 / 4.37 | 0.000533 | 0 | 0 |
| lunar | 26 / 26 | 26/26 | 11.5 / 5.68 | 0.000701 | 0.000701 | 0.0007 |
| combined | 50 / 50 | 50/50 | 17.1 / 4.94 | 0.000701 | 0.000701 | 0.0007 |
2026–2028 catalog validation
TD is TT. UT residuals use NASA’s predicted ΔT separately from Celestine’s model. Magnitude is solar, lunar umbral, or lunar penumbral for penumbral-only events.
| Date | Kind | NASA / Celestine type | TD error (s) | UT error (s) | Magnitude Δ | Gamma Δ |
|---|---|---|---|---|---|---|
| 2026-02-17 | solar | annular / annular | 4.01 | 9.91 | -0.0000218 | 0.000231 |
| 2026-03-03 | lunar | total / total | 4.99 | 10.9 | -0.000203 | -0.0000641 |
| 2026-08-12 | solar | total / total | -10.5 | -4.7 | 0.000000986 | 0.0000703 |
| 2026-08-28 | lunar | partial / partial | 10.8 | 16.6 | -0.000274 | 0.000152 |
| 2027-02-06 | solar | annular / annular | -1.55 | 5.17 | -0.0000105 | 0.000168 |
| 2027-02-20 | lunar | penumbral / penumbral | -8.93 | -2.2 | -0.000615 | -0.000281 |
| 2027-07-18 | lunar | penumbral / penumbral | -2.54 | 4.1 | 0.000155 | 0.000188 |
| 2027-08-02 | solar | total / total | -2.86 | 3.77 | -0.000000278 | -0.000113 |
| 2027-08-17 | lunar | penumbral / penumbral | 3.33 | 9.95 | -0.000286 | 0.0000793 |
| 2028-01-12 | lunar | partial / partial | 5.69 | 12.2 | 0.000076 | -0.0000698 |
| 2028-01-26 | solar | annular / annular | 1.71 | 8.23 | -0.0000163 | 0.000233 |
| 2028-07-06 | lunar | partial / partial | -5.27 | 2.16 | 0.000122 | 0.0000364 |
| 2028-07-22 | solar | total / total | 5.45 | 12.9 | -0.00000882 | -0.00022 |
| 2028-12-31 | lunar | total / total | -6.49 | 0.836 | 0.0000341 | -0.0000586 |
Positions
Apparent geocentric longitude and latitude, TT input, mean ecliptic and mean equinox of date. These reuse the Horizons LT+S vectors and frame transformations checked by the precision tests, including their independent quantity-31 cross-check. Longitude residuals wrap to ±180°. Precise Chiron uses only epochs inside PRECISE_RANGE. Every committed sample is measured.
| Body | N | Lon max (″) | Lon median (″) | Lat max (″) |
|---|---|---|---|---|
| Sun1800-01-01 to 2200-01-01 | 123 | 0.305 | 0.0889 | 0.148 |
| Moon1900-01-01 to 2100-01-01 | 123 | 7.58 | 1.75 | 1.28 |
| Mercury1800-01-01 to 2200-01-01 | 176 | 1.12 | 0.217 | 0.722 |
| Venus1800-01-01 to 2200-01-01 | 148 | 0.579 | 0.117 | 0.439 |
| Mars1800-01-01 to 2200-01-01 | 148 | 1.17 | 0.162 | 0.682 |
| Jupiter1800-01-01 to 2200-01-01 | 123 | 1.36 | 0.363 | 0.636 |
| Saturn1800-01-01 to 2200-01-01 | 123 | 1.66 | 0.395 | 1.03 |
| Uranus1800-01-01 to 2200-01-01 | 123 | 3.34 | 0.502 | 0.662 |
| Neptune1800-01-02 to 2199-12-29 | 123 | 4.64 | 1.76 | 0.359 |
| Pluto1885-01-01 to 2099-01-01 | 91 | 3.16 | 0.478 | 0.35 |
| Chiron1950-01-01 to 2050-01-01 | 123 | 19,800 | 2,380 | 2,200 |
| Chiron precise1950-01-01 to 2050-01-01 | 123 | 0.402 | 0.12 | 0.438 |
Lunar node
Public getNorthNode is the true-node default. Its finite perturbation series is compared with the instantaneous geometric osculating node of the Moon about Earth from Horizons ELEMENTS. These definitions differ; the residual includes that model difference. Orbit normals are rotated from fixed ICRF/J2000 ecliptic coordinates to mean ecliptic and equinox of date with ERFA ecm06 (IAU 2006), using TT. Mean node is compared with ERFA faom03, the IERS 2003 fundamental argument already referred to the mean equinox of date.
| Metric | N | Max (″) | Median (″) |
|---|---|---|---|
| true | 61 | 1,110 | 317 |
| mean | 61 | 0.124 | 0.0489 |
Ascendant and MC
ERFA gmst82 and obl80 mirror chart conventions: UT treated as UT1, mean sidereal time plus east-positive longitude, mean obliquity evaluated at UT. No GAST, nutation or ΔT enters the angles. Independent vector geometry determines the eastern horizon intersection. The reference grid has 208 cases spanning 1900–2100, latitudes −65° to +65° and varied longitudes. Celestine uses its public calculateAngles with its own GMST and obliquity. This isolates implementation residuals under that convention, without validating Earth-rotation forecasts.
| Metric | N | Max (″) | Median (″) |
|---|---|---|---|
| ascendant | 208 | 0.0011 | 0.000211 |
| midheaven | 208 | 0.000546 | 0.000235 |
ΔT
TT minus UT1 model against the USNO historic and monthly tables, including their overlap as separate observations. Decimal years use JD = 2451545 + (year − 2000) × 365.25, exactly as the existing tests. Residuals measure agreement with those tables, not observational uncertainty. The pre-1800 rows characterize a reference disagreement; the model follows NASA’s newer historical polynomial there.
| Metric | N | Max (s) | Median (s) |
|---|---|---|---|
| 1657–1799 | 286 | 12.7 | 3.61 |
| 1800–1899 | 200 | 1.35 | 0.216 |
| 1900–1954 | 110 | 0.32 | 0.0522 |
| 1955–2026 | 705 | 0.104 | 0.0247 |
Event timing
All events in the committed fixtures are used; no sampling. USNO phases and seasons compare returned jdUT against minute-rounded reference UT (up to 30 s of the residual can be rounding). Searches convert UT year boundaries to TT. Horizons stations use ±10-day TT windows; ingresses use ±0.2-day TT windows. Mean-frame comparisons use jdMean; true-equinoctial comparisons use native jd and includeNutation: true. Station types and USNO event counts must agree.
| Reference / frame | N | Max |error| | Median |
|---|---|---|---|
| USNO phases | 9945 | 59.7 s | 16.1 s |
| USNO seasons | 804 | 42.5 s | 15.3 s |
| Horizons stations mean | 160 | 62.8 min | 0.447 min |
| Horizons stations true | 160 | 65.7 min | 0.613 min |
| Horizons ingresses mean | 120 | 195 min | 0.214 min |
| Horizons ingresses true | 120 | 178 min | 0.202 min |
Sign ingresses by body
| Body | Mean frame (min) | True frame (min) |
|---|---|---|
| Sun | 0.113 | 0.119 |
| Moon | 0.182 | 0.182 |
| Mercury | 0.1 | 0.101 |
| Venus | 2.32 | 2.23 |
| Mars | 1.56 | 1.57 |
| Jupiter | 5.33 | 5.56 |
| Saturn | 10.5 | 10.7 |
| Uranus | 21.6 | 21.7 |
| Neptune | 41.6 | 41.6 |
| Pluto | 195 | 178 |
Stations by body
| Body | Mean frame (min) | True frame (min) |
|---|---|---|
| Mercury | 0.833 | 0.85 |
| Venus | 0.418 | 0.275 |
| Mars | 1.88 | 2.12 |
| Jupiter | 4.83 | 5.6 |
| Saturn | 4.63 | 6.7 |
| Uranus | 1.75 | 4.79 |
| Neptune | 4.34 | 8.06 |
| Pluto | 62.8 | 65.7 |
Known gaps
- Default Chiron reaches 5.50° longitude error over 1950-01-01 to 2050-01-01 against Horizons; in 2020–2030, 13 samples reach 0.77°. Opt-in celestine/precise reduces the maximum to 0.402″ on 123 common samples.
- Celestine’s true node is a truncated perturbation series; against the Horizons osculating node, the definition Swiss Ephemeris uses for its true node, its maximum residual is 1,110″ (0.309°), median 317″, so charts using the true node can differ by up to that amount from Horizons-derived values. The mean node matches ERFA faom03 within 0.124″.
- Against Horizons across both frames, Pluto stations differ by up to 65.7 min and ingresses by up to 3.25 h; the worst non-Pluto ingress differs by 41.6 min (Neptune). At Pluto’s slow ingress motion, a 3″ longitude error can move the crossing by hours.
- Before 1800, ΔT differs from the older USNO table by up to 12.7 s. Future ΔT is extrapolated and unmeasured here.
- Moon longitude reaches 7.58″ worst residual against Horizons, about 1.6× the worst planet (Neptune).
Method
Residuals are absolute for maxima and medians. Medians average the two central values for even counts. Signed residuals and every measured row are preserved in accuracy.json, together with thresholds, fixture paths, version and run date. Longitude and angular residuals use the shortest wrapped separation. Results are deterministic apart from the run date and recorded runtime version.
References: JPL Horizons API; NASA solar canon; NASA lunar canon; pyerfa and ERFA; USNO API; USNO historic ΔT and monthly ΔT. Fixture READMEs document retrieval and frame conversion.
Thresholds are deterministic regression guards, approximately 1.5 times the measured worst residual rounded upward to a clean value. They are not physical uncertainty estimates. Eclipse counts, unique matches, types, station types and USNO counts are also checked.
Guard thresholds (44 metrics)
| Metric | Measured max | Threshold | Unit |
|---|---|---|---|
| eclipses.solar | 17.1 | 26 | s |
| eclipses.lunar | 11.5 | 18 | s |
| eclipses.combined | 17.1 | 26 | s |
| eclipses.solarMagnitude | 0.000533 | 0.0008 | |
| eclipses.lunarUmbralMagnitude | 0.000701 | 0.0011 | |
| eclipses.lunarPenumbralMagnitude | 0.0007 | 0.0011 | |
| positions.Sun.longitude | 0.305 | 0.46 | ″ |
| positions.Sun.latitude | 0.148 | 0.23 | ″ |
| positions.Moon.longitude | 7.58 | 12 | ″ |
| positions.Moon.latitude | 1.28 | 2 | ″ |
| positions.Mercury.longitude | 1.12 | 1.7 | ″ |
| positions.Mercury.latitude | 0.722 | 1.1 | ″ |
| positions.Venus.longitude | 0.579 | 0.87 | ″ |
| positions.Venus.latitude | 0.439 | 0.66 | ″ |
| positions.Mars.longitude | 1.17 | 1.8 | ″ |
| positions.Mars.latitude | 0.682 | 1.1 | ″ |
| positions.Jupiter.longitude | 1.36 | 2.1 | ″ |
| positions.Jupiter.latitude | 0.636 | 0.96 | ″ |
| positions.Saturn.longitude | 1.66 | 2.5 | ″ |
| positions.Saturn.latitude | 1.03 | 1.6 | ″ |
| positions.Uranus.longitude | 3.34 | 5.1 | ″ |
| positions.Uranus.latitude | 0.662 | 1 | ″ |
| positions.Neptune.longitude | 4.64 | 7 | ″ |
| positions.Neptune.latitude | 0.359 | 0.54 | ″ |
| positions.Pluto.longitude | 3.16 | 4.8 | ″ |
| positions.Pluto.latitude | 0.35 | 0.53 | ″ |
| positions.Chiron.longitude | 19,800 | 30,000 | ″ |
| positions.Chiron.latitude | 2,200 | 3,400 | ″ |
| positions.Chiron precise.longitude | 0.402 | 0.61 | ″ |
| positions.Chiron precise.latitude | 0.438 | 0.66 | ″ |
| node.true | 1,110 | 1,700 | ″ |
| node.mean | 0.124 | 0.19 | ″ |
| angles.ascendant | 0.0011 | 0.01 | ″ |
| angles.midheaven | 0.000546 | 0.01 | ″ |
| deltaT.1657–1799 | 12.7 | 20 | s |
| deltaT.1800–1899 | 1.35 | 2.1 | s |
| deltaT.1900–1954 | 0.32 | 0.49 | s |
| deltaT.1955–2026 | 0.104 | 0.16 | s |
| timing.USNO phases | 59.7 | 90 | s |
| timing.USNO seasons | 42.5 | 64 | s |
| timing.Horizons stations mean | 62.8 | 95 | min |
| timing.Horizons stations true | 65.7 | 99 | min |
| timing.Horizons ingresses mean | 195 | 300 | min |
| timing.Horizons ingresses true | 178 | 283 | min |
Reproduce with npm run build && npm run bench:accuracy. Validate thresholds with node scripts/bench/accuracy.mjs --check. The report reads committed fixtures without network requests. Documentation deployment runs this check after TypeDoc.
- erfa-node.json
- moon-node.json
- chiron.json
- jupiter.json
- mars.json
- mercury.json
- moon.json
- neptune.json
- pluto.json
- saturn.json
- sun.json
- uranus.json
- venus.json
- horizons-events.json
- horizons-stations.json
- nasa-eclipses-2026-2028.json
- nasa-eclipses.json
- usno-phases.json
- usno-seasons.json
- erfa-angles.json
- deltat.data.json
- historic_deltat.data.json
Provenance: event fixtures, position fixtures, ΔT tables, angle convention, node conversion.