Skip to main content
Latest run July 7, 2026 at 09:01 PM UTC

Benchmarks

Latest published accuracy and performance scorecard, validated against authoritative references.

Machine:
x86_64 / Linux 6.17.0-35-generic
Run:
2026-07-07_18-29-38

How good is Siderust?

Siderust is strongest where precision and throughput both matter.

The top-line metrics below are computed from the latest published benchmark run, not hand-maintained copy.

Accuracy wins

8/14

Best-accuracy finishes across all public benchmark experiments. Avg distance to winner: 14.3% of each experiment's rankable range.

Ephemeris speed wins

9/9

Best-performance finishes in solar-system ephemeris experiments.

Median ephemeris speed

557.8×

Median valid ephemeris timing: Siderust 548 ns/op vs others 305,924 ns/op.

Reference agreement

SOFA/ERFA + JPL

Accuracy is checked against authoritative SOFA/ERFA and JPL Horizons references.

Run summary

Families

5

Experiments (public)

14

References

6

Inputs (n)

1,000

Seed

42

Performance rounds

20

Completeness

14/14

CPU

Intel(R) Core(TM) Ultra 9 185H

Summary charts

Accuracy: p99 vs reference

p99 of the per-experiment metric across rankable rows only. Lower bars mean closer agreement with the reference. Skipped, failed, model-mismatched and reference rows are omitted.

Loading chart…

Performance: ns/op (scalar warm)

Median nanoseconds per operation (scalar warm path) for rows with a valid timing. Lower is faster. Rows without a valid measurement are omitted.

Loading chart…

Families

Frame transformations

2 experiments

Equatorial to Ecliptic Coordinate Transform

equ_ecl
Reference:
erfa — SOFA IAU 2006 ecliptic of date
Metric:
Angular Separation (arcsec)
Tier:
public
Best accuracy:
astropy
Best performance:
siderust
Candidate Profile p50 (arcsec) p99 (arcsec) max (arcsec) mean (arcsec) RMS (arcsec) ns/op CV%
astropy ASTROPY 0 1.72e-10 1.83e-10 1.18e-11 3.51e-11 1,251,202 6.0%
libnova LIBNOVA 0.214317 1.201 1.558 0.334276 0.466443 2,605 14.8%
siderust iau2006a 4.11e-11 3.60e-10 6.88e-10 6.78e-11 1.04e-10 306 18.6%

What

Converts sky positions from RA/Dec (equatorial) to ecliptic longitude/latitude, using the obliquity of the ecliptic.

Why

Ecliptic coordinates are natural for solar system objects. The transform depends on the obliquity model used.

Interpretation

Lower separation = better agreement with ERFA's IAU 2006 obliquity model.

Performance contract

Timed scope: obliquity evaluation + rotation per epoch. Input parsing is outside the timed loop.

Frame Rotation (Bias-Precession-Nutation)

frame_rotation_bpn
Reference:
erfa — SOFA pnm06a (IAU 2006/2000A)
Metric:
Angular Error (mas)
Tier:
public
Best accuracy:
astropy
Best performance:
libnova
Candidate Profile p50 (mas) p99 (mas) max (mas) mean (mas) RMS (mas) ns/op CV%
astropy ASTROPY 0 0 0 0 0 1,676,878 5.2%
libnova LIBNOVA 35.022 104.664 1,287 43.27 70.495 2,626 12.8%
siderust iau2006a 1.28e-8 5.16e-8 7.44e-8 1.50e-8 1.96e-8 40,251 6.6%

What

Rotates a direction vector from the ICRS celestial reference frame to the True-of-Date frame using the Bias-Precession-Nutation (BPN) matrix.

Why

This is the fundamental coordinate transformation used in astrometry. Differences indicate how well each library models Earth's axis wobble.

Interpretation

Lower error = closer to ERFA's IAU 2006/2000A model. Siderust uses simpler Meeus precession + IAU 1980 nutation, so some offset is expected.

Performance contract

Timed scope: matrix construction + single matrix-vector multiply per epoch. Input JD conversion and output formatting are outside the timed loop. All adapters construct the full BPN matrix from scratch.

Pointing

1 experiments

Equatorial to Horizontal (Alt-Az) Transform

equ_horizontal
Reference:
erfa — SOFA/IERS GAST + spherical trigonometry, no refraction
Metric:
Angular Separation (arcsec)
Tier:
public
Best accuracy:
siderust
Best performance:
libnova
Candidate Profile p50 (arcsec) p99 (arcsec) max (arcsec) mean (arcsec) RMS (arcsec) ns/op CV%
astropy ASTROPY 0.289196 0.520133 0.555325 0.291951 0.312747 3,806,375 4.9%
libnova LIBNOVA 8.049 16.362 16.735 8.122 9.305 116 18.8%
siderust iau2006a 1.62e-7 2.55e-7 2.76e-7 1.52e-7 1.60e-7 43,238 7.6%

What

Converts celestial RA/Dec to local azimuth/altitude for a ground observer, using sidereal time and spherical trigonometry.

Why

This is the 'where do I point my telescope?' calculation. Accuracy depends on the GAST (sidereal time) model used.

Interpretation

Lower separation = better. Differences mainly arise from GAST model choice. libnova uses a different sidereal-time model from SOFA/IERS and is ranked as best-available (same observable, disclosed cross-model comparison).

Performance contract

Timed scope: GAST computation + spherical trig per epoch+location. Input parsing (JD, RA/Dec, lon/lat) is outside the timed loop.

Time & Earth rotation

1 experiments

Greenwich Mean Sidereal Time & Earth Rotation Angle

gmst_era
Reference:
erfa — SOFA IAU 2006 GMST / IAU 2000 ERA
Metric:
GMST Error (arcsec)
Tier:
public
Best accuracy:
siderust
Best performance:
libnova
Candidate Profile p50 (arcsec) p99 (arcsec) max (arcsec) mean (arcsec) RMS (arcsec) ns/op CV%
astropy ASTROPY 0.000201 0.000288 0.000288 0.000151 0.000174 541,054 8.6%
libnova LIBNOVA 0.026614 0.068021 0.285826 0.029889 0.038105 11.4 18.8%
siderust iau2006a 6.41e-10 2.84e-9 4.21e-9 8.66e-10 1.16e-9 110 14.8%

What

Computes GMST (how far the Earth has rotated relative to the stars) and ERA (the raw rotation angle) at given epochs.

Why

Time-scale conversions underpin all ground-based astronomical observations. Small errors here compound in coordinate transforms.

Interpretation

Lower error = better agreement with ERFA's IAU 2006 polynomial. Libnova uses Meeus formula which differs at the arcsecond level.

Performance contract

Timed scope: GMST/ERA evaluation per epoch pair (JD_UT1, JD_TT). Input parsing and output serialisation are outside the timed loop. Astropy adapter uses public astropy.time APIs with an explicit UT1 override derived from the benchmark input pair.

Solar system ephemerides

9 experiments

Accuracy matrix

Mean error vs JPL Horizons reference

Body anise (arcsec) astropy (arcsec) astropy JPL DE440 (arcsec) libnova VSOP87 / ELP2000-82B (arcsec) siderust VSOP87 / Meeus Ch.47 / ELP2000-82B (arcsec) siderust JPL DE440 / SIDERUST (arcsec)
Jupiter_barycenter 7.32e-9 0.010308 7.61e-8 0.171143 0.22965 7.19e-9 / 7.19e-9
Moon 0.001581 2.451 0.001581 0.444089 2,556 / 0.435227 0.001581
Mars_barycenter 2.84e-8 0.001971 3.56e-7 0.031558 0.065318 2.77e-8 / 2.77e-8
Mercury_barycenter 4.26e-8 0.000656 7.55e-7 0.019372 0.07561 4.04e-8 / 4.04e-8
Neptune_barycenter 1.19e-9 0.084368 1.28e-8 0.983029 1.046 1.18e-9 / 1.18e-9
Saturn_barycenter 4.07e-9 0.000636 4.34e-8 0.133368 0.203155 3.98e-9 / 3.98e-9
Sun 4.02e-8 0.004496 6.00e-7 0.018922 0.075325 3.90e-8
Uranus_barycenter 1.89e-9 0.048884 2.09e-8 0.506347 0.502093 1.87e-9 / 1.87e-9
Venus_barycenter 4.71e-8 0.000582 6.36e-7 0.020854 0.075949 4.59e-8 / 4.59e-8

Performance matrix

Scalar warm path — median

Body anise (ns/op) astropy (ns/op) astropy JPL DE440 (ns/op) libnova VSOP87 / ELP2000-82B (ns/op) siderust VSOP87 / Meeus Ch.47 / ELP2000-82B (ns/op) siderust JPL DE440 / SIDERUST (ns/op)
Jupiter_barycenter 3,714 368,844 343,997 91,318 102,718 453 / 458
Moon 2,447 315,124 380,315 1,181,279 651 / 285,518 579
Mars_barycenter 3,438 335,148 333,901 145,033 95,262 500 / 491
Mercury_barycenter 3,121 357,870 348,540 129,130 99,685 546 / 551
Neptune_barycenter 4,089 311,905 413,703 87,544 126,070 431 / 457
Saturn_barycenter 3,113 406,507 393,855 129,789 111,848 460 / 429
Sun 3,340 278,456 306,245 40,176 64,853 664
Uranus_barycenter 2,940 365,966 321,200 111,789 148,428 451 / 451
Venus_barycenter 3,064 324,708 362,255 58,860 72,748 517 / 435

Siderust detail

Full accuracy and performance breakdown for siderust (model shown per row)

Body Model p50 (arcsec) p99 (arcsec) max (arcsec) mean (arcsec) RMS (arcsec) ns/op CV%
Jupiter_barycenter VSOP87 0.219465 0.497802 0.529635 0.22965 0.261246 102,718 10.2%
Moon Meeus Ch.47 2,609 5,161 5,487 2,556 2,930 651 19.8%
Mars_barycenter VSOP87 0.073591 0.10887 0.226188 0.065318 0.070015 95,262 8.9%
Mercury_barycenter VSOP87 0.076135 0.113872 0.125957 0.07561 0.077196 99,685 10.4%
Neptune_barycenter VSOP87 0.730148 2.433 2.444 1.046 1.386 126,070 3.9%
Saturn_barycenter VSOP87 0.203933 0.409565 0.419812 0.203155 0.226033 111,848 14.0%
Sun VSOP87 0.073005 0.102843 0.105477 0.075325 0.076428 64,853 9.1%
Uranus_barycenter VSOP87 0.313986 1.404 1.439 0.502093 0.663496 148,428 14.6%
Venus_barycenter VSOP87 0.074049 0.102841 0.125498 0.075949 0.077058 72,748 6.6%

Orbital primitives

1 experiments

Kepler Equation Solver (M → E → ν)

kepler_solver
Reference:
pipeline_python — Kepler equation numerical invariant
Metric:
Kepler E Error (rad)
Tier:
public
Best accuracy:
siderust
Best performance:
siderust
Candidate Profile p50 (rad) p99 (rad) max (rad) mean (rad) RMS (rad) ns/op CV%
libnova LIBNOVA 0 1.78e-15 9.77e-15 1.03e-16 5.18e-16 897 18.3%
siderust iau2006a 0 8.88e-16 7.99e-15 -4.00e-18 4.66e-16 198 12.8%

What

Solves Kepler's equation M = E - e·sin(E) for the eccentric anomaly E, then computes the true anomaly ν. Tests convergence across eccentricities.

Why

Kepler's equation is fundamental to orbital mechanics. Different solvers (Newton-Raphson vs bisection) have different convergence properties.

Interpretation

Lower residual = better convergence. Libnova's bisection method converges to ~1e-6 deg, while Newton-Raphson methods reach ~1e-15 rad.

Performance contract

Timed scope: iterative solver per (M, e) pair. Input parsing is outside the timed loop. This is a numerical convergence benchmark, not an ephemeris accuracy claim.

References & provenance

Authoritative datasets and models used as the ground truth for the experiments above.

  • JPL Horizons DE441 geometric vector
  • Kepler equation numerical invariant
  • SOFA IAU 2006 GMST / IAU 2000 ERA
  • SOFA IAU 2006 ecliptic of date
  • SOFA pnm06a (IAU 2006/2000A)
  • SOFA/IERS GAST + spherical trigonometry, no refraction

Run provenance

The exact commits and binaries that produced this run.

lab
51f3907b8ea1
siderust
b943a4a1e906
anise
43780d81d9fe
erfa
9915ba38c936
libnova
edbf65abe27e
astropy
7dc44b6ec773
OS:
Linux 6.17.0-35-generic
Toolchain:
Rust rustc 1.93.1 (01f6ddf75 2026-02-11) · Python 3.12.3 · pyerfa 2.0.1.5