Validation
Reference engine checked against Swiss Ephemeris; TypeScript port checked against golden fixtures. CI runs both on every commit.
Reference vs Swiss Ephemeris 2.10
Python reference vs Swiss Ephemeris at hundreds of random instants in 1900–2099: apparent geocentric ecliptic longitude (true equinox of date), all bodies, angles and cusps at six latitudes including polar Iceland. Max and RMS disagreement in arcseconds:
| Body | Max | RMS | Note |
|---|---|---|---|
| Sun | 0.4″ | 0.2″ | |
| Moon (precise tier) | 2.5″ | 0.9″ | JPL DE423 fit (2010); DE423 vs DE440 is <0.1″ over this span |
| Moon (embedded series) | 9.6″ | 2.8″ | 60-term ELP abridged |
| Mercury | 0.5″ | 0.2″ | |
| Venus | 0.8″ | 0.2″ | |
| Mars | 0.7″ | 0.2″ | |
| Jupiter | 0.9″ | 0.3″ | |
| Saturn | 0.8″ | 0.4″ | |
| Uranus | 1.9″ | 0.7″ | series truncation; complete VSOP87 holds ≤1″ |
| Neptune | 4.6″ | 2.2″ | series truncation; complete VSOP87 holds ≤1″ |
| Pluto | 2.5″ | 1.0″ | series valid 1885-2099 |
| Chiron | 1.0″ | 0.3″ | JPL Horizons fit, 1850-2150 |
| Mean node | 0.1″ | 0.1″ | |
| True node | 0.8″ | 0.4″ | vs full DE431 files; Swiss’s built-in Moshier mode itself differs from DE431 by up to ~15″ here |
| Ascendant / MC | 3.2″ | — | |
| Placidus cusps (all 12) | 3.2″ | — |
Chart software usually displays to the arcminute (60″). Birth-time uncertainty dominates these deltas. Post-2025 instants also depend on each engine's ΔT extrapolation, which no model can pin down: Build Notes.
TypeScript Port vs Reference
1,438 golden checks (bodies, timescales, nutation, four house systems, speeds, retrograde flags, polar Placidus fallback). Worst deviation 0.82 nano-arcseconds. Same algorithms in IEEE doubles; tolerance is far below astronomical relevance: a porting bug fails the build.
Cross-checks
Moon fit to JPL DE423: 0.19 km residual (≈0.1″). Chiron fit from Horizons vs Swiss Ephemeris asteroid file: 0.85″ worst-case. MCP aspect-date search verified hit-for-hit against an independent scan (nine Mars sextiles, minute agreement, retrograde triple pass included).
Reproduce
git clone the repo, npm install && npm run build && npm test. Discrepancy vs any professional ephemeris: open an issue with UTC instant and coordinates.
Range 1800–2149 (1850–2150 for precise Moon/Chiron). No eclipses or topocentric positions yet. Placidus undefined above polar circles: falls back to whole-sign and reports the fallback in the response. Build notes →