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:

BodyMaxRMSNote
Sun0.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
Mercury0.5″0.2″
Venus0.8″0.2″
Mars0.7″0.2″
Jupiter0.9″0.3″
Saturn0.8″0.4″
Uranus1.9″0.7″series truncation; complete VSOP87 holds ≤1″
Neptune4.6″2.2″series truncation; complete VSOP87 holds ≤1″
Pluto2.5″1.0″series valid 1885-2099
Chiron1.0″0.3″JPL Horizons fit, 1850-2150
Mean node0.1″0.1″
True node0.8″0.4″vs full DE431 files; Swiss’s built-in Moshier mode itself differs from DE431 by up to ~15″ here
Ascendant / MC3.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 →