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.
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.
Families
Frame transformations
2 experimentsEquatorial 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 experimentsEquatorial 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 experimentsGreenwich 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 experimentsAccuracy 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 experimentsKepler 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