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.

These are residuals on sampled dates, not guaranteed bounds for every date or a validation of personal predictions. Near a sign, nakshatra, pada or house boundary, a small numerical error can change the classification.

Current result against JPL Horizons

Absolute longitude residuals in arcseconds
Bodyp95Sampled maximumSamples
Sūrya · sun7.7711.971000
Candra · moon30.4655.811000
Budha · mercury128.87184.581000
Śukra · venus34.8284.501000
Maṅgala · mars52.81200.271000
Guru · jupiter67.49166.851000
Śani · saturn64.8795.681000

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

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