Skip to main content
Latest run June 5, 2026 at 01:47 PM UTC

Benchmarks

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

Machine:
x86_64 / Linux 6.17.0-35-generic
Run:
2026-06-05_12-14-12

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

180.1×

Median valid ephemeris timing: Siderust 554 ns/op vs others 99,750 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

10

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:
libnova
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,212,659 7.1%
libnova LIBNOVA 0.214317 1.201 1.558 0.334276 0.466443 2,988 13.1%
siderust iau2006a 4.11e-11 3.60e-10 6.88e-10 6.78e-11 1.04e-10 26.4%

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,808,804 4.6%
libnova LIBNOVA 35.022 104.664 1,287 43.27 70.495 3,217 10.9%
siderust iau2006a 1.28e-8 5.16e-8 7.44e-8 1.50e-8 1.96e-8 46,668 1.9%

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:
siderust
Candidate Profile p50 (arcsec) p99 (arcsec) max (arcsec) mean (arcsec) RMS (arcsec) ns/op CV%
astropy ASTROPY 0.288816 0.520133 0.555325 0.29176 0.312525 4,455,211 13.3%
libnova LIBNOVA 8.049 16.362 16.735 8.122 9.305 26.5%
siderust iau2006a 1.62e-7 2.55e-7 2.76e-7 1.52e-7 1.60e-7 43,248 13.2%

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 not rankable for accuracy in this experiment.

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:
astropy
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 583,859 6.3%
libnova LIBNOVA 0.026614 0.068021 0.285826 0.029889 0.038105 24.7%
siderust iau2006a 6.41e-10 2.84e-9 4.21e-9 8.66e-10 1.16e-9 31.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) erfa EPV00 / Moon98 (arcsec) libnova VSOP87 / ELP2000-82B (arcsec) siderust VSOP87 / Meeus Ch.47 / ELP2000-82B (arcsec) siderust JPL DE440 / SIDERUST (arcsec)
Jupiter_barycenter 7.32e-9 7.61e-8 0.171143 0.22965 7.19e-9 / 7.19e-9
Moon 0.001581 2.451 0.001581 2.451 0.444089 2,556 / 0.435227 0.001581
Mars_barycenter 2.84e-8 3.56e-7 0.031558 0.065318 2.77e-8 / 2.77e-8
Mercury_barycenter 4.26e-8 7.55e-7 0.019372 0.07561 4.04e-8 / 4.04e-8
Neptune_barycenter 1.19e-9 1.28e-8 0.983029 1.046 1.18e-9 / 1.18e-9
Saturn_barycenter 4.07e-9 4.34e-8 0.133368 0.203155 3.98e-9 / 3.98e-9
Sun 4.02e-8 0.004496 6.00e-7 0.004492 0.018922 0.075325 3.90e-8
Uranus_barycenter 1.89e-9 2.09e-8 0.506347 0.502093 1.87e-9 / 1.87e-9
Venus_barycenter 4.71e-8 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) erfa EPV00 / Moon98 (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,300 319,370 95,244 96,153 391 / 393
Moon 2,671 6,907 1,078 / 450,836
Mars_barycenter 2,864 331,273 124,610 110,419 501 / 495
Mercury_barycenter 3,007 378,912 152,782 110,308 554 / 573
Neptune_barycenter 3,426 316,992 71,142 124,490 436 / 429
Saturn_barycenter 2,913 329,047 118,311 110,062 409 / 388
Sun 358,959 382,848 36,801 61,871 736
Uranus_barycenter 3,250 319,006 104,255 135,874 432 / 400
Venus_barycenter 3,035 360,538 66,268 73,654 426 / 519

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 96,153 7.3%
Moon Meeus Ch.47 2,609 5,161 5,487 2,556 2,930 1,078 10.1%
Mars_barycenter VSOP87 0.073591 0.10887 0.226188 0.065318 0.070015 110,419 5.6%
Mercury_barycenter VSOP87 0.076135 0.113872 0.125957 0.07561 0.077196 110,308 3.9%
Neptune_barycenter VSOP87 0.730148 2.433 2.444 1.046 1.386 124,490 9.9%
Saturn_barycenter VSOP87 0.203933 0.409565 0.419812 0.203155 0.226033 110,062 7.6%
Sun VSOP87 0.073005 0.102843 0.105477 0.075325 0.076428 61,871 10.2%
Uranus_barycenter VSOP87 0.313986 1.404 1.439 0.502093 0.663496 135,874 5.9%
Venus_barycenter VSOP87 0.074049 0.102841 0.125498 0.075949 0.077058 73,654 7.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 1,355 16.4%
siderust iau2006a 0 8.88e-16 7.99e-15 -4.00e-18 4.66e-16 208 14.5%

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
56c27d320ef3
siderust
da582bedc1d1
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