BHARAT EPHEMERIS · CURRENT BENCHMARK
Accuracy, measured.
Run: 2026-09-10T05:33:59.161Z. 1000 dates · 2000-01-02 → 2050-01-01 (50 years · 1000 samples). Seven classical bodies; lunar nodes are not benchmarked in this fixture.
Current result against JPL Horizons
| Body | p95 | Sampled maximum | Samples |
|---|---|---|---|
| Sūrya · sun | 7.77″ | 11.97″ | 1000 |
| Candra · moon | 30.46″ | 55.81″ | 1000 |
| Budha · mercury | 128.87″ | 184.58″ | 1000 |
| Śukra · venus | 34.82″ | 84.50″ | 1000 |
| Maṅgala · mars | 52.81″ | 200.27″ | 1000 |
| Guru · jupiter | 67.49″ | 166.85″ | 1000 |
| Śani · saturn | 64.87″ | 95.68″ | 1000 |
p95 uses linear interpolation at (n−1) × 0.95 on sorted absolute residuals. Approximately 5% of observations can exceed p95. The maximum describes this sample only.
Download and check the observations
- 7,000 per-body observations (CSV)
- Run metadata and summary (JSON)
- Checksums and source fingerprint
- Standalone statistics verification script
Save residuals.csv, summary.json and verify.mjs together, then run node verify.mjs with Node.js. This independently recalculates the published summary from the downloaded observations; it does not recompute the astronomy engine.
Method and provenance
Each Bharat longitude is the SAME kernel lib/chart.ts consumes: Sun = surya.suryaKeralaSayana, Moon = candra.candraKeralaSayana (both already SAYANA = Kerala nirayana + Lahiri ayanāṃśa); the 5 tāra-grahas use each kernel's sphuta(jd) (consumed by chart.ts as NIRAYANA) + the same Lahiri ayanāṃśa → SAYANA. The Horizons astrometric ICRF vector is rotated to mean-ecliptic-of-date via IAU 2006 P03 precession + mean obliquity, with annual aberration added to match the substrate's geocentric-at-retarded-time convention — yielding a SAYANA longitude. Residual = |Δλ| sayana-vs-sayana, so the ayanāṃśa cancels and the residual is the pure substrate-vs-Horizons positional error. ΔT (UT→TT) via lib/substrate.ts:jdUtcToJdTt for the frame rotation only; kernels are fed the UT-based JD exactly as chart.ts feeds them.
Reference: NASA JPL Horizons API (https://ssd.jpl.nasa.gov/api/horizons.api). Frame: ICRF J2000 mean-equator Cartesian (light-time corrected geometric position). Units: AU.. This run used the stored reference fixture; it did not fetch a new JPL solution.
The runtime uses in-house kernels without an external ephemeris service. The model nevertheless contains published modern orbital elements and offline-fitted correction coefficients against JPL/Swiss references. Runtime independence does not mean independence from calibration data. A separate Swiss comparison is not available in this current run.
The published fixture is an evaluation sample, not a newly randomized or independently held-out test. Its possible overlap with fitting data has not been established here. Numerical agreement must not be interpreted as proof of a solely algebraic derivation.
Scope and limits
The API accepts a wider 1900–2100 epoch than this 2000–2050 benchmark. The table does not establish the same accuracy outside the sampled period. Polar sunrise-based schedules are unavailable when no ordinary sunrise/sunset pair exists. No universal timing-boundary guarantee is made.
Older Swiss/foreign-pipeline studies have been removed from this current results page to avoid mixing engine versions. The preserved legacy download is explicitly historical: legacy summary.
API documentation · API plans · Personal readings and payments at Lunar Luxury