*Bigger scope — a ~34,600-year deep-time catalogue layer, 27 bodies and 117,955 stars; the TKS-EPH series runs from a 1.9 MB, 100-year kernel (TKS-EPH-1) to a 28.5 MB file for 1,100 years (TKS-EPH-2, 1550–2650 CE) where the full reference kernel needs 120 MB and Swiss's long-range files 94 MB. Faster — 0.038 s vs 0.148 s for Swiss Ephemeris (3.9×; Swiss's C library, positions only; 0.266 s if Swiss also computes speeds) for the same 110,000 apparent positions, measured on one machine in one run with TKS-EPH-2. A benchmark of speed and of agreement with the reference ephemeris, not of observational accuracy; methodology and reproduce steps in TKS benchmarks.
34,600 YEARS27 BODIES117,955 STARS0.35 µs / POSITION
Reference & apparent astronomy, independent N-body dynamics and stellar–Galactic dynamics — one Rust framework, no FFI.
⚡ TKS-EPH-2 · measured on this code, 2026-10-08 · same machine · same run · same 110,000 positions
A high-performance astronomical computation engine for applications that need speed, precision and long-span computation.
3.9×
FASTER THAN SWISS EPHEMERIS · C LIBRARY
one thread · 0.347 µs vs 1.35 µs per apparent position (positions only, both sides · 7× if Swiss also computes speeds, its default)
41× on 14 cores vs Swiss on 1 thread · 0.033 µs / position
race · 110,000 apparent positions
bars fill in proportion to the measured wall-clock times (10× slowed so the eye can follow); counters show positions computed so far. Swiss with speeds (its default flags): 0.266 s in C, 0.291 s through Python.
fidelity to the reference ephemeris · max error, milliarcseconds (log scale) · lower is betterTKS-EPH-2 Swiss files
TKS-EPH-2: maximum over its whole 1550–2650 span against the DE440 file it was fitted from (the 1950–2050 subset gives the same ≤ 0.33 mas; target 0.3). Swiss column: Swiss Ephemeris 2.10.03 data files (DE431-based) against DE440 with the same reduction flags; the outer-planet gap is mostly the older solution inside those files, not a defect of Swiss's code.
0.33 mas worst body28.5 MB 1550 – 2650 CESHA-256 per release · reproducible buildCommercial licence · evaluation free · developer · production · enterprise · academic / research grant free on requestRust · C · Python · WASM in the licence0.5 mas rms vs Skyfield + DE441
Apple M3 Max, release build, best of 3. Position = geocentric apparent longitude (light-time, aberration, solar deflection, true equinox of date), 11 bodies × 10,000 days. Swiss Ephemeris 2.10.03 timed from C (the library inside the pyswisseph wheel, real .se1 files, no Python in the loop), position-only to match TKS; with speed computation, Swiss's default, it is 2.42 µs/position. A benchmark of speed and of agreement with the reference ephemeris (DE440) — not a claim about observational accuracy of either library.
Every encounter-class star: closest approach b (log scale) against the epoch of closest approach. Click a point to jump there.
Each track has the straight-line shape r(t) = √(b² + v²(t − tc)²), φ = atan(v(t − tc)/b) in the plane of the pass, with b the catalogue's headline closest approach — the Galactic-tide solution (linearised tide vs full two-orbit integration: median 0.35 %). For Galactic-dominated stars (HD 7977, TOI-4172 …) that b is 10–40× smaller than the straight-line value, which each star's card also shows; the true path of such a star bends, so the track is a stylised guide while b and the epoch are the data. The azimuth of each track is arbitrary. Shells: Hills / inner Oort 2×10³–2×10⁴ AU, outer Oort 2×10⁴–2×10⁵ AU. Planetary region (< 10³ AU) is off-scale. Duplicate catalogue rows (HD 168442 = GJ 710, HD 7977 twice) are counted once.
Three engines · three domains
Reference & apparent astronomyEngine A
DE440 / DE441 state data as reference states (not a runtime dependency)
Own SPK/DAF evaluation · own time scales (TDB · TT · UT1, ΔT)
Long-term propagation, incl. beyond the reference-kernel coverage edge (labelled reconstruction)
1,000-yr propagation against DE440: 627 km (Sun) · 12,174 km (Pluto) — and 759,011 km for the
raw 11-body Moon. That lunar result is why the Moon gets its own solution (DE kernel inside coverage,
fitted lunar series beyond: ~400–580 km at 1,000 yr) — full block and reproduce command:
long-term dynamical validation →
Stellar & Galactic dynamicsEngine C
6D stellar trajectories from published astrometry, per-row source provenance
Galactic potential: six named models incl. a Ferrers bar and calibrated spiral arms
Stellar encounters · closest approaches · linearised tide vs full two-orbit integration
Oort-cloud perturbation research: impulse, orbital-energy and angular-momentum change
Catalogue: 162 stars · 141 with a determined distance · 26 encounter-class (< 1 pc) (±8 Myr).
Encounter catalogue →
How to read the names.Engine A / B / C are the internal code names (they appear in the API, the
validation tables and the papers); the domains above are what they compute. The platform is TKS Ephemeris,
a computational framework — Pañcāṅga, eclipses, chronology and the deep-time catalogues are applications
computed from it. Engine C is the newest domain: it answers what the Solar System's neighbours do — see
GJ 710 and the encounter catalogue.
Computational scale
~34,600years of coverageDeep-time catalogue span: TKS Ephemeris −13,000…+17,189 (~30,189 yr) plus Engine-B beyond-edge bands (±2,000 yr each).
162,200eclipse events144,168 within TKS Ephemeris + 18,032 beyond-edge reconstructions; solar and lunar, with Besselian elements and ΔT.
−13,200 → +17,191years · Engine A (TKS Ephemeris) reference span = 30,390 yrEngine A's reference kernel covers −13,200-05-06 … +17,191-03-15 = 30,390 yr — read from the kernel itself and pinned by a test, never quoted from prose. The catalogues scan the inner range −13,000 … +17,189 = 30,189 yr. Outside it Engine B takes over, labelled a reconstruction.
341 MB precomputed layer · O(log n) event-stream lookup · ~2.5 ms warm response. Every count here is
quoted from the release manifest data/catalogue_manifest.json — the single authoritative source — and the live
framework can reproduce any of it. Scale is not accuracy; that is a separate claim, below.
Validation
Against independent implementations test-time, never runtime
SPK state reproduction
position ≤ 1.1 m
SPK state reproduction
velocity ≈ 10⁻¹⁰ km/s
Reference compared
jplephem · DE421 · DE440 · DE441
Apparent astronomy
ICRF RA/Dec ≈ 0.046″ vs Skyfield
Apparent astronomy
ecliptic λ/β ≈ 0.047″ vs Skyfield
Time scales
Δ = 0 s vs xalen
Deep-time frame · −13,000 … +17,000
Moon–Sun elongation ≤ 0.8″ · Lahiri vs Swiss ≤ 0.03° · tithi/karaṇa 2978/2978 vs DE441 (Vondrák precession)
Eclipse engine
NASA 5MC · 0 saros · 0 true type mismatches
Origin of the code
native Rust · zero FFI · zero runtime deps in the astronomy kernel
Three different claims, deliberately kept apart: ~34,600 years is coverage,
≤ 1.1 m is a state reproduction against another implementation, and 0.047″ is an
apparent-position cross-check. None of them is a statement about observational accuracy, and beyond
the DE coverage edge everything is a labelled reconstruction. Full report:
Validation & Trust Report · eclipse cross-check:
NASA Five Millennium Canon.
What is deliberately not claimed
Observational accuracy
not claimed from a code-vs-code comparison
Beyond +17,191 or before −13,200
reconstruction — phase and timing degrade with span
Million-year calendar
runnable, not verified: uncertainty grows
Catalogue completeness
not a survey — each catalogue states its scope
The same rule the research pages follow: every number is attributable to a named artifact or
an independent reference, and where no independent reference exists we say so instead of inventing one.
Long-term dynamical validation
1,000-year propagation against DE440 own 11-body integration · seeded at J2000
Sun
627 km
Pluto
12,174 km
Raw 11-body Moon
759,011 km
Read these as deviation from a reference ephemeris — a propagation-consistency measure.
They are not observational accuracy, and not an error bar of the reference ephemeris itself.
Reproduce: cargo run --release -p tks-ephemeris --example engine_b_span 1000 5 0
(barycentric, per body; 97 s of integration for this checkpoint on this machine).
Why the Moon gets its own solution
The lunar result motivates a dedicated lunar solution:
DE kernel within its reference-ephemeris coverage, with a fitted lunar series used beyond it.
1,000-year lunar test
~400–580 km fitted-series deviation(interior of band)
Same test at the band edge
≤ 1.25 × 10³ km (11.3′) — the worst place in the band
Longest span tested (2,000–4,000 yr)
still ≈1.25 × 10³ km — the series does not accumulate error
Same span, raw 11-body Moon
759,011 km — phase lost (≈62°)
Reproduce
… --example moon_series_check
Checkpoint detail barycentric Δ vs DE440 · 100 / 500 / 1,000 yr
checkpoint
100 yr
500 yr
1000 yr
Sun
44 km
322 km
627 km
Mercury
567 km
13,380 km
53,626 km
Venus
45 km
324 km
624 km
Earth
104 km
4,138 km
9,755 km
Moon — raw 11-body
12,526 km
314,341 km
759,011 km
Moon — fitted seriesfuture band, edge-adjacent
1,275 km
1,259 km
1,254 km
Moon — fitted seriespast band, edge-adjacent
807 km
745 km
656 km
Mars
62 km
470 km
700 km
Jupiter
76 km
382 km
765 km
Saturn
30 km
336 km
677 km
Uranus
193 km
1,223 km
2,274 km
Neptune
920 km
5,805 km
12,716 km
Pluto
775 km
7,299 km
12,174 km
Every row is the same quantity: distance between our propagated state and the DE440 state at that
epoch. The Moon's columns are the measurement that motivated the separate lunar path above — the integrator is not
wrong about the Moon, it simply cannot hold a 27-day phase over centuries. The two fitted series rows are
that solution measured at the same spans in its own band (window ending at the band's outer edge — the worst
place in the band, and where the ±2,000-yr catalogue sits): note that their deviation barely moves between 100 yr
and 1,000 yr, because a fitted series does not accumulate error the way an integrator does.
Application · built on the TKS framework
TKS Pañcāṅga — Traditional astronomical calendar computed from the TKS astronomical framework
Not a stand-alone calendar algorithm: every limb below is derived from the same DE441 reference states,
apparent-place chain and star-defined ayanāṃśa that the ephemeris domain uses — then frozen as a precomputed
deep-time layer (~64.4 million transitions over the 30,189-yr DE441 interior; the eclipse layer extends to ~34,600 yr).
One precomputed transition layer — no ephemeris scan. Each limb is an O(log n) event stream; any date+place Pañcāṅga = these streams ∩ (sunrise…sunset). Live markers = today's limbs.
The framework converts a planetary state into an apparent astronomical position and then into traditional
sidereal / Pañcāṅga quantities:
state → apparent place → ecliptic longitude → ayanāṃśa → nirayana longitude → rāśi / nakṣatra / tithi.
The same chain without the last step is what the ephemeris and validation endpoints return; the eclipse,
chronology and stellar-encounter applications branch off it at the apparent-place stage.
Numerical precision ≠ physical accuracy ≠ observational uncertainty — all three are distinct.
jplephem · Skyfield (0.5 mas rms, Moon and planets) · SOFA ld · Swiss Ephemeris timed from C
TKS-EPH-2 licence
native library · C ABI · Python · WebAssembly · data files · API — commercial licence (evaluation build 1950–2050 free: live demo; academic / research grant free on request)
Provenance
Third-party notices
IAU 2000B nutation table and routines derived from ERFA/SOFA (BSD-3), ΔT tables from xalen-time (Apache-2.0) — licence texts: /third-party-notices
JPL DE440/441
source trajectory data of the TKS-EPH files (NASA/JPL, public) — credited here; TKS-EPH is not affiliated with or endorsed by NASA/JPL
TKS
independent numerical evaluation and astronomical reduction
A unified, precomputed, queryable astronomical-event layer over ~34,600 years — eclipses (162,200: solar + lunar, with Besselian elements & ΔT) and Pañcāṅga transitions (~64.4M: tithi · nakṣatra · yoga · karaṇa · vāra · saṅkrānti · rāśi-ingress · ayana · lunar phases · planetary rāśi) — served by O(log n) catalogue lookups, with the live engine independently reproducing any of it.
one file per kind — tithi · karaṇa · nakṣatra · yoga · saṅkrānti · ayana · phases · planets' rāśi · conjunctions
Lookup
binary search (partition_point) → O(log n) per query, no scan
Build
range split across threads → per-chunk grid → merge → sort
Reproduce
live engine recomputes any entry from DE441 + TKS ayanāṃśa
One file per kind ⇒ one partition_point per query: the web Pañcāṅga, the
eclipse pages and the API all read this same layer, and the live engine reproduces any entry from the kernels.
Integrator benchmark kept in one place on this page
The 100 / 500 / 1,000-yr comparison of this integrator against DE440 — the raw 11-body Moon
included, together with the separate lunar solution it motivates — is in
Long-term dynamical validation above: same numbers, one source, reproduce command next to them.
Engine B live run is available in dev mode (?dev=1); Δt ≤ 10 yr. Beyond the TKS Engine-A coverage edge (−13,200 … +17,191) the engine auto-switches to Engine B: the live route is capped at ±20 yr (engineering guardrail), while the offline CLI integrates far beyond (default cap 15,000 yr). For the Moon the divergent N-body phase is replaced by a fitted truncated lunar series (DE441-fit; λ ≈ 3.7–5.2′ over 1,000-yr windows inside its band, ≈11′ at 2,000–4,000 yr, λ ≈ 7′ over the ~2200-yr extrapolation the ±2000-yr catalogue uses). A precomputed ±2000-yr eclipse catalogue (planets from the N-body, Moon from the series) is on /tks-eclipse — a reconstruction; no independent reference exists beyond the edge.
Moon — what is extra: the lunar phase is the first casualty of long spans, so the Moon gets a dedicated path:
(i) a fitted truncated lunar series (ELP mean-longitude + ~97 Delaunay terms, amplitudes least-squares fitted to DE441) replaces the divergent N-body Moon beyond the edge — validated λ ≈ 5–7′ / β ≈ 0.2°;
(ii) an ELP2000-82B port (IMCCE) as an independent cross-check (0.1″ @ J2000);
(iii) topocentric moon-rise/set (Meeus, parallax+refraction) in the Month table; and
(iv) the Moon's phases as transitions in the precomputed catalogue.
Udaya-asta · heliacal & eclipses
Aṣṭāṃśa limits · Sūrya-siddhānta ch. 9 layer 4
Moon
12°
Venus
8° / 10°
Mercury
12° / 14°
Jupiter
11°
Mars
17°
Saturn
15°
Each limit is the C of the Sūrya-siddhānta Ch. 9 rule: a graha is udaya (visible) when its iṣṭa-kālāṃśa K — the lagnāntara in asus ÷ 60, which depends on the place (rising times of the signs) and on the graha's ecliptic latitude — is greater than C; otherwise asta. The east/west and retrograde/direct branch gives Venus 8/10°, Mercury 12/14°. There is no plain Sun–planet longitude-gap test anywhere in TKS.
One rule everywhere. The Pañcāṅga, the kuṇḍalī, the graha-ghaṭanā events and this card read the same function, on TKS apparent ecliptic-of-date positions, for the chosen place. Arcus visionis and Schaefer (on TKS Udaya-Asta) are physical visibility criteria for the eye and are a different question from combustion.
Next solar / lunar eclipse layer 3 · 4
Place-dependent solar eclipse (topocentric) and geocentric lunar eclipse. Method: syzygy search in the
TKS apparent pipeline → vector geometry; lunar shadow angle = πMoon ± sSun (atmosphere +2%).
Live web scans up to 10 years; larger ranges (within DE441 coverage) are served
instantly from the precomputed baseline catalogue (no cap). Beyond-coverage scans use the
offline CLI panchanga --eclipse-scan --engine b (Engine B).
Detailed per-eclipse PDF is an admin-code export.
Validation · 2026.Lunar: 3 March Total (umag 1.15, P1 08:44 → P4 14:26 UTC) · 28 August Partial (umag 0.93). Solar: 12 August Total (Reykjavik) · 17 February Annular (Antarctica ~70°S, 140°E) — both match known (NASA/Espenak) values. Full-series catalogue now precomputed over the whole DE441 range — see the Eclipse baseline catalogue below.
Eclipse baseline catalogue · 30,189 years
Precomputed · self-contained Engine A · TKS Ephemeris
Solar eclipses
71,440
Lunar eclipses
72,728
Total events
162,200
Coverage
−13000 … +17189 · ~30,189 yr
Per event
time · type · magnitude · Saros · Pañcāṅga · contacts · ΔT · Besselian elements · greatest point + path width
Built once by the engine (independent, reproducible); served instantly from the stored catalogue. Solar local circumstances are evaluated from the stored Besselian elements alone — no ephemeris query.
Cross-validated against the NASA/GSFC Five Millennium Canon (Espenak & Meeus): Saros 0 mismatches, γ mean 0.0003 R⊕, magnitudes ~0.002, modern greatest-time sub-second.
Eclipse engine · validation
NASA/GSFC Five Millennium Canon full-range cross-validation · −1999…+3000
NASA 5MC agreement demonstrates computational consistency with the reference catalogue. It is not, by itself, a claim of absolute observational accuracy. Ancient-era differences may reflect different lunar theories and ΔT models.
Pañcāṅga transition catalogues · 30,189 years
Global · self-contained DE441 + TKS ayanāṃśa
Tithi
11,201,578
Karaṇa
22,403,156
Nakṣatra
10,896,492
Yoga
11,711,565
Saṅkrānti
362,254
Rāśi ingress · 7 bodies
6,223,581
Ayana · equinox/solstice
120,756
Moon phases
1,493,544
Total transitions
~64.4M
Place-independent transition instants; any date+place pañcāṅga = transitions ∩ (sunrise..sunset).
Beyond the DE441 edge · ±2000-yr Pañcāṅga Engine B · precomputed
Engine-B reconstruction beyond the TKS Engine-A coverage edge — the top-form day-pañcāṅga and the month table both read it directly; graha sphuṭa & kundali require the live ephemeris. Planetary longitudes are being added to this layer via an offline Engine-B scan.
Lookup latency /v1/tks/limbs
Warm · limbs + rāśi + ayana + phase
~2.7 ms
Cold · first call (loads 315 MB)
~0.9 s
Catalogue on disk
315 MB
Build · 14 threads
P1 61 min + P2 15 min
O(log n) binary search per limb — no ephemeris scan.
Catalogue composition transition counts · one precomputed layer
Karaṇa
22,403,156
Yoga
11,711,565
Tithi
11,201,578
Nakṣatra
10,896,492
Rāśi ingress · 7 bodies
6,223,581
Moon phases
1,493,544
Saṅkrānti
362,254
Ayana · equinox/solstice
120,756
Each class is a separate O(log n) event stream; any date+place pañcāṅga is a dot-product of the five limb streams. Karaṇa (22.4M) dominates because karaṇa = Δλ/6° (half the tithi interval).
Observational phenomena & tides
Conjunction · opposition · station · retrograde · greatest elongation layer 3
Daily scan of TKS apparent longitudes + bisection/extremum search. Station = zero of daily motion; opposition = elongation 180° (outer planets); greatest elongation = inner planets.
Visibility · arcus visionis + Schaefer.arcus visionis (Ptolemaic solar-elongation limit): Mercury 10° · Venus 5° · Mars 11.5° · Jupiter 10° · Saturn 13°. Schaefer photometric: planet magnitude (distance + phase + extinction) vs limiting magnitude from sky surface brightness (Crumey 2014); topocentric altitude + solar depression. Schaefer twilight approximation (constants from literature); full validation needs observational data.
Tidal astronomy force + equilibrium + external model
Approach
Status
Tide-generating force a ∝ 2GM·R/d³
live · Moon §14
Equilibrium tide η = A·(3cos²z − 1)/2
live · Moon §14
External marine model (Mumbai)
§14b · Open-Meteo Marine / FES
Own ocean modelling (bathymetry, resonance)
planned / offline
Equilibrium tide A = (GM_body/GM_earth)·R·(R/d)³ is a theoretical fluid-Earth (no continents) response. Actual local sea level also needs bathymetry + ocean dynamics — shown for Mumbai (§14b) from an external model with a 48-h tide chart; equilibrium range ≈ 0.75 m vs actual Mumbai range ≈ 2.3 m. Equilibrium tide ≠ actual local sea level. Classical/shāstrīya orbs and the equilibrium tide are theoretical; the external model is used only for real-world comparison.
Validation
Reference states · SPK own checks
Check
Result
TKS SPK vs jplephem (DE421 · DE440 · DE441)
position ≤ 1.1 m · velocity ≈ 10⁻¹⁰ km/s
SPK figures are numerical reproduction relative to a reference evaluator — not “reference-kernel accuracy”.
Two-pass filter (Pass-1 syzygy root-find; Pass-2 local only for |β_moon| < 1.6°) and the scan window split across up to 8 threads in one request. Kernel reads: one pread per record + a thread-local decoded-record cache (the fix that removed a syscall storm — system time 129 s → 0.05 s for 200 yr). CPU > 100 % confirms real multi-core use.
Server behaviour
Thread-per-connection server: a slow scan does not serialise other requests (a 1 yr eclipse scan long-polls nothing else). Engine B (N-body) is heavier by nature — the live route is capped at ±20 yr near the DE edge, while the offline CLI integrates far beyond. Endpoint numbers are measured, not assumed: see the latency table in the matrices below.
SPK ≤ 1.1 m · ≈ 0.047″ vs Skyfield · Δ = 0 s vs xalen
Only this engine is specified. Beyond DE coverage, Engine B is an offline reconstruction that can extend to millions of years under a configurable guardrail; long-span output carries a growing uncertainty.
8-thread sweet spot; CPU > 100 % confirms genuine multi-core use. Totals identical across builds.
Endpoint latency Engine A · one request · warm
Endpoint
14-core host
1-vCPU server
/v1/tks/ephemeris
2.1 ms
21.7 ms
/v1/tks/tithi
1.5 ms
3.2 ms
/v1/tks/heliacal
3.7 ms
9.6 ms
/v1/tks/sun-year
8.9 ms
19.4 ms
/v1/tks/eclipses1 yr scan
90.0 ms
771.5 ms
/v1/tks/encountersEngine C
229.2 ms
321.7 ms
14-core column re-measured 2026-10-08 (median of 9 warm requests); 1-vCPU column is the earlier 2026-09-30 measurement (median of 5), not re-run. Median through curl -w %{time_total} against 127.0.0.1 (no network across the measurement), release build — reproduce with scripts/measure_latency.sh, which writes data/latency_measurements.json (the only source for this table, and the check that keeps these cells honest). Eclipse-scan timing varies ≈ 90–102 ms between runs; the committed build of the previous day gave the same on this machine, so the older 44 ms / 136 ms / 7 ms figures for eclipses / encounters / sun-year were not reproducible today. The ephemeris route is ≈ 5× faster than before (per-epoch reduction, TKS-EPH-2). a 1-vCPU host is noisy between runs (ephemeris read 29.0 ms before the deploy and 21.7 ms after), and its eclipse/encounter rows cost more because the scan is multi-threaded and it has one core. Engine C's row is the whole 162-star catalogue with a per-star Galactic integration and a 386 KB response — the on-demand cost, not a cached count. After the SPK fix: one pread per record, segment directory cached, thread-local decoded-record cache.
Domains · coverage matrices
Engine A vs Engine B vs Engine C
Aspect
Engine A — SPK/DAF
Engine B — N-body
Engine C — stellar & Galactic
Source
TKS reference states (independent reader)
11-body integration from a DE epoch
catalogued 6D stellar states (162 stars) + six Milky-Way potentials
Dominated by the input 6D state (parallax / radial-velocity revision)
Three engines, one framework: Engine A is the TKS reference ephemeris, Engine B reconstructs it (and extends it) where no reference exists, Engine C answers a different question — what the Solar System's neighbours do — from external 6D catalogues. Its controls are limit tests, not accuracy claims.
Coverage & precision
DE441 reference coverage (Engine A)
−13,200-05-06 … +17,191-03-15 · 30,390 yr
Eclipse baseline catalogue
−13,000 … +17,189 · 30,189 yr
Pañcāṅga transition catalogues
−13,000 … +17,189 · 30,189 yr
Engine B live band
±20 yr near DE edge
Engine-B reconstruction
> 10⁶ yr experimental
Engine C catalogue window
±8 Myr · 164 rows
SPK reproduction
≤ 1.1 m
Apparent vs Skyfield
≈ 0.047″
Time scale vs xalen
Δ = 0 s
TKS Ayanāṃśa vs Lahiri
≈ 57.7″ (definition)
Numerical precision ≠ physical accuracy ≠ observational uncertainty. Kernel coverage is read from the DE kernels themselves — cargo run --release --example coverage_probe regenerates data/kernel_coverage.json, and tests/de441_reader.rs pins that file to the kernel.
Engine C · stellar & Galactic coverage
Catalogue
162 unique stars · 164 rows
Distance determined
141 (parallax S/N ≥ 3)
Encounter class < 1 pc
27 (in ±8 Myr)
Galactic potentials bracketed
6 (incl. MW2014)
Control · pair vs Kepler hyperbola
Δ = 3 × 10⁻⁹
Control · interaction off vs straight line
Δ = 1.7 × 10⁻⁶
Tide vs full orbits
median 0.356 % · RMS 9.59 % · max 72 %
Literature anchors
GJ 710 10,533 AU · HD 7977 2,312 AU
Measurements, with their controls, are in docs/tks-sensitivity-paper.md (§3.4 exact controls, §5 statistics). The controls are idealised limit tests — where a closed-form answer exists the model is checked against it; they say nothing about observational accuracy. Over ±10⁵ yr the limiting uncertainty is the input 6D state itself (DR2→EDR3 revisions), not the integrator.
Sidereal & bodies
Ayanāṃśa comparison
System
Value
Δ vs TKS
Zero-epoch
TKS Ayanāṃśa (dynamic Chitrāpakṣa) computed
24.216901°
baseline
≈ 285 CE
Lahiri (ICRC-1956) our model
24.232929°
+57.7″
285 CE†
KP / KPNA‡
≈ 24.238–24.242°
+~1.3–1.5′
291 CE‡
B.V. Raman‡
≈ 22.79–22.82°
−~1.4°
389 CE‡
TKS & Lahiri values are computed by this engine. †Lahiri's epoch and the ‡KP / Raman rows are third-party estimates, unverified here (shown for orientation). TKS Ayanāṃśa = Spicā (HIP 65474) at nirayana 180° via ICRS + proper motion. Zero-epoch = the year a system assumes sāyana λ = nirayana λ.
Bodies & points
Classical bodies
Sun · Moon · Mercury · Venus · Mars · Jupiter · Saturn
Numerical precision ≠ physical accuracy ≠ observational uncertainty. Our SPK evaluator matches the reference evaluator numerically (≤1 m), but that does not prove the positions are physically identical everywhere — over long spans model/observational uncertainty dominates.
Deep-time ephemeris proven
DE441 reference range: −13,200-05-06 … +17,191-03-15 · 30,390 yr. Long-term propagation of Engine B (full 11-body, tight tolerance) — diagnostics:
Δλ · Δβ · Δr · Δv · energy/angular-momentum drift (with Moon). Large Δt is slow (faster in release); 1 kyr–1 Myr = offline batch (experimental).
Disclaimer: deep-time results are dynamical reconstructions, not equivalent to modern observational ephemeris accuracy.
Deep-time live run is available in dev mode (?dev=1); Δt ≤ 10 yr. Larger spans run as an offline batch (CLI / release). Deep-time results are reconstructions, not equivalent to modern observational ephemeris accuracy — see σλ(t) below.
Śāstra / textual reconstruction planned — input: epoch · planet · textual longitude · reference system · ayanāṃśa · calendar interpretation; output: source vs TKS Δλ (kala/vikala). This will distinguish TKS from the general Pañcāṅga site.
Long-term uncertainty · σλ(t)
Engine-B initial-condition Monte-Carlo — σλ(t), arcsec 10 members · σp = 1 km · σv = 1e-6 km/s · offline
Δt (yr)
Earth/EMB
Mercury
Venus
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto
10
1.4
9.7
1.7
0.78
0.30
0.10
0.03
0.01
0.01
100
13.7
49.8
17.7
9.4
2.1
1.1
0.57
0.54
0.28
1000
137
420
176
88
23
14
7.5
3.9
5.4
10000
1321
7027
1778
840
274
125
70
39
20
Sensitivity to the initial state only (model error excluded); σλ grows ≈ linearly in time and scales linearly with the assumed σ. Reproduce: cargo run --release -p tks-ephemeris --example uncertainty (env TKS_MEMBERS, TKS_SKIP_MC).
Engine-B vs DE441 model divergence — |Δλ|, arcsec offline · planets + EMB
Δt (yr)
Earth/EMB
Mercury
Venus
Mars
Jupiter
Saturn
Uranus
Neptune
Pluto
100
16
101
0.5
0.02
0.01
0.00
0.01
0.04
0.02
1000
166
8557
53
0.4
0.09
0.04
0.15
0.58
0.51
10000
1777
5105
5446
6.4
0.09
0.60
1.3
1.8
0.63
True model error of the simplified N-body (point masses + 1PN EIH + J2–J6 + C22/S22; no asteroids) against DE441. Threshold 5′ = 300″: the outer planets (Mars through Pluto) stay within at 10 kyr; Mercury, Venus, Earth exceed 5′ by ≈1–2 kyr (values wrap past ~1°). DE440 and DE441 agree to <0.01″ within their overlap, so their difference is not a usable uncertainty proxy.