Accuracy

How accurate is Vedaksha?

Accuracy

What is measured, and what is not.

Two classes of evidence live on this page, and they carry different guarantees. Keep them apart when you cite either.

Class A below is a per-body residual our own oracle tests print, against a committed 24,350-row JPL Horizons DE441 fixture the engine ships. Each Class A block carries the exact cargo test command that reproduces it; run it against a fresh checkout and you get the same numbers. The fixture itself is regenerable from a fresh JPL Horizons pull via scripts/generate_horizons_oracle.py in the engine repository.

Class B below is cross-validation against two national ephemeris agencies, measured with reference kernels the engine does not ship and its own CI cannot regenerate. It is a dated, provenance-stamped reading, not a number CI asserts on every push. The measurement was made with vedaksha-parity, now public: get it and the reference kernels yourself and re-run this table.

Class A, self-verifiable

Per-body residuals, from our own oracle.

Measured against a committed 24,350-row JPL Horizons DE441 fixture the engine ships in tests/. Both providers describe the measured-Delta T era (1900-2025) only; neither figure implies anything about the other, and neither should be paired with the full 24,350-row fixture count.

Precisely what this measures

A longitude residual, against a barycentre, over one era.

Mean angular residual in apparent geocentric ecliptic longitude (of date) vs JPL Horizons. Not a general position-accuracy figure: the oracle fixture also stores ref_latitude, ref_distance and ref_speed (see oracle_comparison.rs), but none of those enter this number -- longitude only.

Comparisons query planetary-system barycentre IDs (Body::naif_id()), matching what the DE440s kernel stores and what SpkReader returns -- not physical planet centres. Querying centres instead would inject a spurious ~0.1 arcsecond offset for the outer planets (scripts/generate_horizons_oracle.py), the same order of magnitude as the headline mean itself.

SpkReader

DE440s kernel, 15,350 comparisons over 1900-2025.

Class A · self-verifiable
0.1031.187Uranus15,350
Jupiter0.0980.8851,535
Mars0.0940.2911,535
Mercury0.0910.4111,535
Moon0.1660.5941,535
Neptune0.0990.9871,535
Pluto0.1000.2621,535
Saturn0.0970.3391,535
Sun0.0900.2181,535
Uranus0.1001.1871,535
Venus0.0910.3711,535

Reproduce this table yourself:

cargo test -p vedaksha-ephem-core --release --locked --test oracle_comparison -- --include-ignored

AnalyticalProvider

VSOP87A + ELP/MPP02, no runtime data file, 13,815 comparisons over 1900-2025.

Class A · self-verifiable
0.2391.896Neptune13,815
Sun0.1800.3241,535
Moon0.1690.6071,535
Mercury0.1800.5041,535
Venus0.1800.4731,535
Mars0.1780.3841,535
Jupiter0.2391.0371,535
Saturn0.2510.5681,535
Uranus0.2671.1111,535
Neptune0.5031.8961,535

Reproduce this table yourself:

cargo test -p vedaksha-ephem-core --release --locked --test analytical_oracle -- --include-ignored

Beyond the measured era

Past 2025, this is Delta T, not ephemeris error.

Over the full 1900-2100 span both the engine and JPL Horizons must PREDICT Delta T rather than read it from the IERS record, and the two predictions diverge. The worst of that divergence, 44.9″ (Moon), is a time-scale disagreement, not a measurement of ephemeris accuracy, and must not be quoted beside the Class A figures above.

This is why the Class A tables above are scoped to 1900-2025 rather than the fixture's full 1900-2100 span.

Class B, not reproducible from this repo

Cross-validation against national ephemeris agencies.

Measured against reference kernels the engine does not ship and its own CI cannot regenerate. Dated and provenance-stamped below; treat it as a snapshot, not a live gate.

Cross-validation

Two independent national agencies.

Published 2026-09-01 · harness: A separate parity harness maintained by the same authors · engine v9.1.0.

Class B · not reproducible from this repo
JPLDE440 (local kernel)0.1302.940″ (Moon)13,874
IMCCEINPOP21a (local kernel)0.1151.270″ (Jupiter)11,732

These references were not shipped with the engine and were not exercised by this repository's CI. They were measured once, out of band, using a separate parity harness maintained by the same authors, and are reported here as a dated snapshot.

A separate parity-testing project that consumes this engine only through its published interfaces and holds its own local copies of the reference kernels. It is maintained by the same authors as this engine: what is independent is the methodology and the reference ephemerides, not the party performing the measurement.

The harness is public at github.com/arthiqlabs/vedaksha-parity. Bring your own copies of the reference kernels and this table is reproducible, not just legible.

By distance from J2000

Residual growth away from the epoch.

Class B · not reproducible from this repo

The “max” column below is a lower bound on the true worst case, not a measured worst case. A coarse date grid can alias a short-period oscillation and understate its peak; do not read these maxima as ceilings.

0-1008 dates
Sun0.0840.102
Moon0.0090.019
Mercury0.0840.119
Venus0.0800.102
Mars0.0650.113
Jupiter0.1780.372
Saturn0.1920.302
Uranus0.5391.215
Neptune1.0562.308
100-2008 dates
Sun0.0940.147
Moon0.0170.027
Mercury0.1030.157
Venus0.0910.136
Mars0.1150.302
Jupiter0.3240.755
Saturn0.2240.432
Uranus0.5822.270
Neptune1.9083.632
200-3008 dates
Sun0.1210.189
Moon0.0460.088
Mercury0.1240.246
Venus0.1150.186
Mars0.2210.646
Jupiter0.4500.639
Saturn0.3600.585
Uranus1.3993.132
Neptune3.3854.488
300-4008 dates
Sun0.1560.249
Moon0.0780.168
Mercury0.1380.227
Venus0.1350.221
Mars0.3660.758
Jupiter0.4130.828
Saturn0.4990.702
Uranus1.8954.587
Neptune4.8126.463
400-5006 dates
Sun0.1600.273
Moon0.2420.350
Mercury0.1770.353
Venus0.1960.358
Mars1.2593.794
Jupiter0.4760.870
Saturn0.7801.027
Uranus3.2096.583
Neptune5.7916.379
500-6004 dates
Sun0.1450.165
Moon0.5090.603
Mercury0.1510.225
Venus0.1090.144
Mars2.2996.277
Jupiter0.5310.591
Saturn1.1811.325
Uranus5.48410.145
Neptune7.8268.294

Not measured here

Three things this page is silent on, deliberately.

  • House cusps. No figure on this page covers house-cusp placement or any house-system boundary. That validation does not exist yet; see the open backlog rather than assuming a silent pass.
  • The true node. The osculating true-node figures above are agreement with JPL Horizons over the sampled epochs, not a claim of agreement with any other library's true-node computation, which can differ by construction (osculating vs. mean, and by perturbation model).
  • Ayanamsha agreement with other implementations. Each ayanamsha system is checked against its own cited primary source and against an independent derivation of that same primary, never against another engine or software package. Agreement with another implementation is not evidence of correct derivation, so it is not tested for and not claimed.

Provenance

Clean-room, sourced.

Every external data source the engine ingests, and the cleanroom record behind the more contested derivations, are public in the engine repository.

  • DATA_PROVENANCE.md — every external data source ingested, with primary URL, license status, fetch date, and content hash.
  • docs/audit/ — dated clean-room and review records for the more contested derivations (lunar theory, ayanamsha, node direction rules), each naming what was checked and against what.

Further reading

The technical report.

A technical report on the engine's ephemeris pipelines, measured accuracy, and clean-room provenance, available as a PDF. It is not peer reviewed: read it as a detailed writeup from the people who built the engine, not as an independently refereed publication.

vedaksha-technical-report.pdf — the rendered report, unreviewed. The LaTeX source is also available for anyone who wants to build it themselves.