TECHNISCHE DOKUMENTATION
Numerische Ephemeridenrechnung
Mathematisches Verfahren, Konstanten, Reihen und sprachübergreifende Validierung
Version 0.5.3
25. Juli 2026

Inhalt
 •	Zusammenfassung
 •	1. Fachbegriffe und Symbole
 •	2. Konventionen, μ und Grundgrößen
 •	3. Anfangszustand aus oskulierenden Elementen
 •	3.1 Ellipse
 •	3.2 Hyperbel
 •	3.3 Parabel und nahezu parabolischer Grenzbereich
 •	4. Störkörperdaten und Hermite-Interpolation
 •	5. Bewegungsgleichung
 •	5.1 Relativistische Sonnenkorrektur
 •	5.2 Erd-J2
 •	5.3 Nichtgravitative Beschleunigung
 •	6. Dormand-Prince 5(4)
 •	7. Zeitskalen und Beobachter
 •	8. Lichtlaufzeit und scheinbare Richtung
 •	9. Binärtabellen
 •	10. Extrembeispiele
 •	11. Reproduzierbarkeit und Grenzen
 •	Anhang A. Vergleich der Programmiersprachen
 •	A.1 Genauigkeit, alphabetisch
 •	A.2 Geschwindigkeit, schnellste zuerst
 •	Anhang B. Lizenzabgrenzung

Zusammenfassung
Der beschriebene Rechenkern berechnet scheinbare topozentrische Ephemeriden von Asteroiden, Kometen und interstellaren Objekten aus oskulierenden Bahnelementen. Elliptische, parabolische und hyperbolische Anfangszustände werden ohne externen Orbitdienst behandelt. Die anschließende numerische Integration berücksichtigt solare Gravitation, die erste relativistische Korrektur, Planeten, Erde und Mond, Erd-J2, optional 16 massereiche Asteroiden sowie Marsden-A1/A2/A3. Planeten- und Asteroidenzustände werden mit kubischer Hermite-Interpolation aus kompakten Tabellen gewonnen.
Die beobachtete Richtung entsteht nach UTC-nach-TDB-Näherung, Lichtlaufzeit, Erdrotation, Nutation und Präzession. Sechs Extremobjekte mit 20 eingefrorenen JPL-Horizons-Zeilen bilden den gemeinsamen Abnahmetest aller 49 eigenständigen Zielprogramme.
1. Fachbegriffe und Symbole
Alle Fachbegriffe und Abkürzungen, die für das Verständnis der folgenden Rechnung erforderlich sind, werden hier zusammenhängend erklärt. Bei der ersten Verwendung besonders wichtiger Begriffe folgt zusätzlich eine kurze Erklärung im Fließtext.
Glossar der astronomischen und numerischen Fachbegriffe.
Fachbegriff	Bedeutung in diesem Artikel	
Ephemeride	Vorausberechnete Folge von Himmelspositionen und ergänzenden Größen für festgelegte Zeitpunkte und einen Beobachtungsort.	
scheinbar	Bezeichnet hier die Richtung nach Lichtlaufzeit, Erdrotation, Nutation und Präzession; atmosphärische Refraktion ist nicht Teil dieses Rechenkerns.	
topozentrisch	Auf den wirklichen Standort des Beobachters auf oder nahe der Erdoberfläche bezogen, nicht auf den Erdmittelpunkt.	
geozentrisch / heliozentrisch	Geozentrisch bedeutet auf den Erdmittelpunkt, heliozentrisch auf den Sonnenmittelpunkt bezogen.	
Baryzentrum	Gemeinsamer Massenschwerpunkt mehrerer Körper; EMB bezeichnet das Erde-Mond-Baryzentrum.	
oskulierende Bahnelemente	Sechs Elemente einer momentanen Keplerbahn, die Ort und Geschwindigkeit der tatsächlich gestörten Bahn an einer Epoche berührt.	
Epoche	Zeitpunkt, für den Bahnelemente oder ein Zustandsvektor gelten.	
Kegelschnitt	Ellipse, Parabel oder Hyperbel; die Exzentrizität e unterscheidet die drei Bahnformen.	
Exzentrizität e	Dimensionsloser Formparameter: e<1 Ellipse, e=1 Parabel und e>1 Hyperbel.	
q, Tp, i, Ω, ω	Periheldistanz, Perihelzeit, Bahnneigung, Länge des aufsteigenden Knotens und Argument des Perihels.	
M, E, H, ν	Mittlere, exzentrische, hyperbolische und wahre Anomalie; Winkel beziehungsweise Hilfsgröße für die Position auf der Bahn.	
J2000	In diesem Kern die feste äquatoriale Bezugsorientierung zur Standardepoche JD 2451545.0.	
AE	Astronomische Einheit; exakt 149597870,7 Kilometer.	
JD	Julianisches Datum, eine fortlaufende astronomische Tageszählung.	
UTC / TAI / TDB	Koordinierte Weltzeit, Internationale Atomzeit und baryzentrische dynamische Zeit; UTC enthält Schaltsekunden, TDB dient der Dynamik.	
Schaltsekunde	Ganzzahlige Korrektur, die UTC an die ungleichmäßige Erdrotation bindet, während TAI gleichmäßig fortläuft.	
Gravitationsparameter μ	Produkt G·M aus Gravitationskonstante und Körpermasse. μ⊙ bezeichnet den Sonnenwert, μE den Erdwert.	
Massenverhältnis ηb	Verhältnis Mb/M⊙ eines Störkörpers zur Sonne; gleichbedeutend mit μb/μ⊙.	
Störkörper	Körper, dessen Gravitation die reine Zweikörperbahn zusätzlich beschleunigt.	
direkter und indirekter Term	Direkt wirkt der Störkörper auf das Objekt; indirekt wird die gleichzeitige Beschleunigung des heliozentrischen Ursprungs abgezogen.	
N16	Optionaler Satz der 16 massereichsten Asteroiden, deren Störungen zusätzlich integriert werden.	
kubische Hermite-Interpolation	Polynominterpolation dritten Grades, die an beiden Tabellenknoten Position und Geschwindigkeit exakt übernimmt.	
Little-Endian float64	Binärformat mit dem niederwertigsten Byte zuerst und 64-Bit-Gleitkommazahlen nach IEEE 754.	
Runge-Kutta-Verfahren	Einschrittverfahren, das mehrere Beschleunigungsauswertungen kombiniert, um den Zustand über einen Zeitschritt fortzuschreiben.	
eingebettetes Verfahren	Zwei Runge-Kutta-Lösungen verschiedener Ordnung benutzen dieselben Stufen; ihre Differenz schätzt den lokalen Fehler.	
Dormand-Prince 5(4)	Eingebettetes Runge-Kutta-Paar fünfter und vierter Ordnung mit sieben Stufen.	
Butcher-Tafel	Tabellarische Anordnung der Runge-Kutta-Koeffizienten ci, aij und bi; sie legt Stufenzeitpunkte, Zwischenzustände und Endgewichte vollständig fest.	
lokaler Fehler	Geschätzter Fehler eines einzelnen Integrationsschritts, hier aus der Differenz der Lösungen fünfter und vierter Ordnung.	
adaptive Schrittweite	Automatische Verkleinerung oder Vergrößerung des Zeitschritts anhand der normierten Fehlerschätzung.	
RMS	Quadratischer Mittelwert; hier die Wurzel aus dem Mittel der sechs quadrierten, skalierten Komponentenfehler.	
clamp	Begrenzung eines Zahlenwerts auf ein geschlossenes Minimum-Maximum-Intervall.	
Lichtlaufzeit	Zeit, die das Licht vom Objekt zum Beobachter benötigt; sie verschiebt die ausgewertete Emissionszeit.	
Präzession / Nutation	Langsame säkulare beziehungsweise kürzerperiodische Änderung der Orientierung der Erdachse.	
GMST	Mittlere Greenwich-Sternzeit, also der aus UTC abgeleitete Rotationswinkel der Erde relativ zum mittleren Himmelsbezug.	
Erd-J2	Führender Koeffizient der Abplattung des Erdschwerefelds gegenüber einer idealen Punktmasse.	
Marsden A1/A2/A3	Empirische nichtgravitative Beschleunigungen eines Kometen in radialer, transversaler und normaler Richtung.	
RA / Deklination	Rektaszension und Deklination; das äquatoriale Koordinatenpaar der scheinbaren Himmelsrichtung.	
MPC-ρ-Faktoren	Vom Minor Planet Center verwendete dimensionslose Stationsfaktoren für Abstand von Erdachse und Äquatorebene.	
Bogensekunde	1/3600 Grad; das Zeichen ″ kennzeichnet diese Winkeleinheit.	
Referenzephemeride / Residuum	Vergleichsposition aus JPL Horizons beziehungsweise der verbleibende sphärische Winkelabstand zur Kernrechnung.	
Kovarianzfortpflanzung	Fortrechnung statistischer Unsicherheiten und Korrelationen einer Bahnlösung; sie gehört nicht zum dokumentierten Nominalkern.	
Abnahmetest	Festgelegter Vergleich, dessen Grenzwert ein Port für die Freigabe einhalten muss.	

Die Symbole μ⊙ und μE werden im gesamten Artikel eindeutig unterschieden.
Symbol	Bedeutung	Wert oder Einheit	
μ⊙ = G·M⊙	Heliozentrischer Gravitationsparameter der Sonne	0.0002959122082855911 AE³/Tag²	
μE = G·ME	Geozentrischer Gravitationsparameter der Erde	8.887692445125148326e-10 AE³/Tag²	
μMond = G·MMond	Gravitationsparameter des Mondes	1.09318946230584718e-11 AE³/Tag²	
ηb = μb/μ⊙	Massenverhältnis eines Störkörpers b zur Sonne	dimensionslos	
r, v, a	Orts-, Geschwindigkeits- und Beschleunigungsvektor	AE; AE/Tag; AE/Tag²	
t0, Tp, Δ	Elementepoche, Perihelzeit und Differenz t0−Tp	JD beziehungsweise Tage	
q, a, p, e	Periheldistanz, große Halbachse, Bahnparameter und Exzentrizität	AE beziehungsweise dimensionslos	
M, E, H, ν	Mittlere, exzentrische, hyperbolische und wahre Anomalie	Radiant	
Ω, ω, i	Knotenlänge, Perihelargument und Inklination	Grad bei Eingabe, intern Radiant	
c	Lichtgeschwindigkeit	173.144632674240 AE/Tag	
ρ	Topozentrischer Objektvektor beziehungsweise im J2-Abschnitt Erdabstand	AE	
J2, RE	Erdabplattungskoeffizient und Äquatorradius	dimensionslos beziehungsweise AE	
A1, A2, A3	Nichtgravitative Marsden-Parameter	AE/Tag²	
T	Julianische Jahrhunderte seit J2000	dimensionslos	

2. Konventionen, μ und Grundgrößen
Der dynamische Zustand y=[x,y,z,vx,vy,vz] ist heliozentrisch, rechtshändig und auf das äquatoriale J2000-System bezogen. Positionen sind AE, Geschwindigkeiten AE/Tag, Beschleunigungen AE/Tag². Interne Winkel sind Radiant. Bahnelemente, geographische Eingaben und Ergebniswinkel sind Grad.
Das Symbol μ bezeichnet grundsätzlich einen Gravitationsparameter μ=G·M, also das Produkt aus Gravitationskonstante G und Masse M. Ohne Körperindex wurde es in älteren Fassungen missverständlich für die Sonne verwendet. Dieser Artikel schreibt deshalb immer μ⊙=G·M⊙ für die Sonne und μE=G·ME für die Erde. Für einen Störkörper b gilt ηb=μb/μ⊙=Mb/M⊙.
Symbol	Exakter Wert	Einheit	
π	3.141592653589793238462643383279502884	dimensionslos	
AE	149597870.7	km	
μ⊙ = G·M⊙	0.0002959122082855911	AE³/Tag²	
μE = G·ME	8.887692445125148326e-10	AE³/Tag²	
μMond = G·MMond	1.09318946230584718e-11	AE³/Tag²	
Lichtgeschwindigkeit	173.144632674240	AE/Tag	
Lichtlaufzeit	0.0057755183	Tag/AE	
Masse Erde/Sonne	3.0034896149156e-6	dimensionslos	
Masse Mond/Sonne	3.6943033497651e-8	dimensionslos	
Erdradius	6378.1363 / 149597870.7	AE	
J2 Erde	1.08262668e-3	dimensionslos	
Schiefe J2000	84381.448	Bogensekunden	

3. Anfangszustand aus oskulierenden Elementen
Eingaben sind Epoche t0, Exzentrizität e, Periheldistanz q, Perihelzeit Tp, Knoten Ω, Perihelargument ω und Inklination i. Oskulierend bedeutet, dass diese Elemente an der Epoche dieselbe Position und Geschwindigkeit wie die gestörte Bahn darstellen. Mit μ⊙=G·M⊙ und Δ=t0−Tp wird zuerst die wahre Anomalie ν bestimmt.
3.1 Ellipse
Gültigkeit: e < 1 - 1e-8
a = q / (1 - e)
n = sqrt(μ⊙ / a^3)
M = normalize(n Δ, -π, +π)
E0 = M                    für e < 0.8
E0 = sign(M) π            sonst
Ek+1 = Ek - (Ek - e sin Ek - M) / (1 - e cos Ek)
Abbruch: |Korrektur| < 2e-14 oder nach 80 Iterationen
ν = 2 atan2(sqrt(1+e) sin(E/2), sqrt(1-e) cos(E/2))
3.2 Hyperbel
Gültigkeit: e > 1 + 1e-8
a = q / (e - 1)                    (positive Betragskonvention)
M = sqrt(μ⊙ / a^3) Δ
H0 = asinh(M / e)
Hk+1 = Hk - (e sinh Hk - Hk - M) / (e cosh Hk - 1)
Abbruch: |Korrektur| < 2e-14 oder nach 80 Iterationen
ν = 2 atan2(sqrt(e+1) sinh(H/2), sqrt(e-1) cosh(H/2))
3.3 Parabel und nahezu parabolischer Grenzbereich
Gültigkeit: |e - 1| <= 1e-8
s = sqrt(2 q^3 / μ⊙)
B = Δ / s
D = 2 sinh(asinh(1.5 B) / 3)
ν = 2 atan D
Die Barker-Form verhindert die numerisch schlechte Division durch 1−e oder e−1 im unmittelbaren Parabelbereich. Anschließend gelten für alle drei Fälle:
p = q (1 + e)
r = p / (1 + e cos ν)
v0 = sqrt(μ⊙ / p)
r_orb = [r cos ν, r sin ν, 0]
v_orb = [-v0 sin ν, v0 (e + cos ν), 0]
Die Drehung aus der Bahnebene verwendet Rz(Ω) Rx(i) Rz(ω). Der ausgeschriebene zweidimensionale Eingang [x,y] wird zu:
X = (cosΩ cosω - sinΩ sinω cosi) x + (-cosΩ sinω - sinΩ cosω cosi) y
Y = (sinΩ cosω + cosΩ sinω cosi) x + (-sinΩ sinω + cosΩ cosω cosi) y
Z = (sinω sini) x + (cosω sini) y
Die feste Ekliptik-nach-Äquator-Rotation ist eine x-Achsenrotation um 84381.448 Bogensekunden und wird identisch auf Position und Geschwindigkeit angewandt.
4. Störkörperdaten und Hermite-Interpolation
Jeder Tabellenknoten enthält Position r0 und Geschwindigkeit v0. Für zwei Knoten im Abstand h und u=(t−t0)/h interpoliert der Kern mit den folgenden Polynomen. Eine kubische Hermite-Interpolation übernimmt an beiden Enden Position und Geschwindigkeit exakt; dies sind die vollständigen Reihen und ihre exakten numerischen Koeffizienten:
h00(u) =  2 u^3 - 3 u^2 + 1
h10(u) =    u^3 - 2 u^2 + u
h01(u) = -2 u^3 + 3 u^2
h11(u) =    u^3 -   u^2

r(u) = h00 r0 + h10 h v0 + h01 r1 + h11 h v1

dh00/dt = ( 6 u^2 - 6 u) / h
dh10/dt =   3 u^2 - 4 u + 1
dh01/dt = (-6 u^2 + 6 u) / h
dh11/dt =   3 u^2 - 2 u
v(u) = (dh00/dt) r0 + dh10 v0 + (dh01/dt) r1 + dh11 v1
Störkörper	Masse/Sonnenmasse	
Merkur	1.660114153054348e-7	
Venus	2.447838287784771e-6	
Mars	3.227156037554996e-7	
Jupiter	9.547919101886966e-4	
Saturn	2.858856727222416e-4	
Uranus	4.366249662744965e-5	
Neptun	5.151383772628673e-5	
Pluto	7.350487833457740e-9	

N16-Körper	Masse/Sonnenmasse	
Ceres	4.719154706681575e-10	
Pallas	1.0297360324108826e-10	
Juno	1.4471670474939703e-11	
Vesta	1.3026875547328177e-10	
Iris	8.589038999387399e-12	
Hygiea	4.238598614896659e-11	
Eunomia	1.5243642468487352e-11	
Psyche	1.1978215785019767e-11	
Euphrosyne	8.133159614634648e-12	
Europa	2.0216913527078825e-11	
Cybele	7.06871003275745e-12	
Sylvia	1.6337820878172953e-11	
Thisbe	8.965306556356798e-12	
Camilla	1.0878696848144257e-11	
Davida	2.9345275747768696e-11	
Interamnia	2.1327387533901138e-11	

5. Bewegungsgleichung
d/dt [r, v] = [v, a(r,v,t)]
Die solare Grundbeschleunigung ist aS=−μ⊙ r/|r|³. Für einen Störkörper mit heliozentrischer Position rb und Massenverhältnis ηb wird der direkte und indirekte Term gemeinsam addiert:
ab = μ⊙ ηb [(rb - r)/|rb - r|^3 - rb/|rb|^3]
Erde und Mond werden innerhalb 0,2 AE getrennt verwendet, außerhalb als Erde-Mond-Baryzentrum. Die acht übrigen Körper Merkur, Venus, Mars, Jupiter, Saturn, Uranus, Neptun und Pluto wirken stets. N16 wird nur bei gesetztem Schalter und vollständigen Daten ergänzt.
5.1 Relativistische Sonnenkorrektur
arel = μ⊙ / (c^2 |r|^3) * [ (4 μ⊙/|r| - |v|^2) r + 4 (r·v) v ]
5.2 Erd-J2
Innerhalb 0,02 AE von der Erde wird die übliche J2-Beschleunigung im erdfesten Näherungsrahmen des Ports als direkter minus indirekter Term addiert:
μE = G·ME = 8.887692445125148326e-10 AE^3/Tag^2
k = 1.5 J2 μE RE^2 / ρ^5
aJ2,x = k x (5 z^2/ρ^2 - 1)
aJ2,y = k y (5 z^2/ρ^2 - 1)
aJ2,z = k z (5 z^2/ρ^2 - 3)
5.3 Nichtgravitative Beschleunigung
g(r) = α (r/r0)^(-m) [1 + (r/r0)^n]^(-k)
Standard: r0=2.808, α=0.1112620426, m=2.15, n=5.093, k=4.6142
ang = g(r) [A1 er + A2 et + A3 en]
er ist radial, en liegt normal zur Bahnebene in Richtung r×v, und et=en×er ist transversal. Sind A1=A2=A3=0, wird exakt der Nullvektor geliefert.
6. Dormand-Prince 5(4)
Ein eingebettetes Runge-Kutta-Paar erzeugt gleichzeitig eine Lösung fünfter und vierter Ordnung. Die Differenz schätzt den lokalen Fehler. Eine Butcher-Tafel ist die tabellarische Sammlung der Stufenzeitpunkte ci, der Zwischengewichte aij und der Endgewichte bi eines Runge-Kutta-Verfahrens. Sie beschreibt damit den Integrationsschritt vollständig. Sämtliche im Code verwendeten Butcher-Koeffizienten sind:
c2=1/5;       a21=1/5
c3=3/10;      a31=3/40; a32=9/40
c4=4/5;       a41=44/45; a42=-56/15; a43=32/9
c5=8/9;       a51=19372/6561; a52=-25360/2187;
              a53=64448/6561; a54=-212/729
c6=1;         a61=9017/3168; a62=-355/33; a63=46732/5247;
              a64=49/176; a65=-5103/18656
c7=1;         a71=35/384; a72=0; a73=500/1113;
              a74=125/192; a75=-2187/6784; a76=11/84

Ordnung 5: b = [35/384, 0, 500/1113, 125/192,
                -2187/6784, 11/84, 0]
Ordnung 4: b*= [5179/57600, 0, 7571/16695, 393/640,
                -92097/339200, 187/2100, 1/40]
Für jede der sechs Komponenten gilt sc=2e−15+2e−13·max(|yalt|,|yneu|). RMS bedeutet quadratischer Mittelwert; die normierte RMS-Fehlerzahl ist sqrt(sum((Fehler/sc)²)/6). Ein Schritt wird bei Fehlerzahl ≤1 oder |h|≤1e−8 Tag angenommen. Der neue Faktor ist clamp(0.9·Fehlerzahl^(−0.2),0.1,5). clamp begrenzt den Faktor auf das geschlossene Intervall [0,1;5]; bei Fehlerzahl null wird 5 verwendet. Die Schrittweite bleibt zwischen 1e−8 und 0,25 Tag. Eine Integration darf höchstens 1.000.000 Schritte ausführen.
7. Zeitskalen und Beobachter
Die öffentliche Zeit ist UTC. Für die Dynamik wird näherungsweise TDB=UTC+(TAI−UTC+32,184 s)/86400 verwendet. Die implementierten Schaltsekundenstufen lauten:
JD >= 2457754.5 : TAI-UTC = 37 s
JD >= 2457204.5 : TAI-UTC = 36 s
JD >= 2456109.5 : TAI-UTC = 35 s
JD >= 2454832.5 : TAI-UTC = 34 s
JD >= 2453736.5 : TAI-UTC = 33 s
sonst          : TAI-UTC = 32 s
Mit T=(JDUTC−2451545)/36525 wird GMST in Grad berechnet. Die folgenden Polynome und kurzen trigonometrischen Reihen sind vollständig und enthalten alle im Port verwendeten Zahlen:
GMST = 280.46061837 + 360.98564736629 (JD-2451545)
       + 0.000387933 T^2 - T^3/38710000

L_sun  = 280.4665  + 36000.7698 T              [Grad]
L_moon = 218.3165  + 481267.8813 T             [Grad]
Ω_moon = 125.04452 - 1934.136261 T             [Grad]

Δψ = -17.20 sin Ω_moon -1.32 sin(2 L_sun)
     -0.23 sin(2 L_moon) +0.21 sin(2 Ω_moon)   [Bogensekunden]
Δε =  9.20 cos Ω_moon +0.57 cos(2 L_sun)
     +0.10 cos(2 L_moon) -0.09 cos(2 Ω_moon)   [Bogensekunden]

ε0 = 23 + 26/60 + 21.448/3600 Grad
     -(46.8150 T + 0.00059 T^2 - 0.001813 T^3) Bogensekunden

ζ = 2306.2181 T + 0.30188 T^2 + 0.017998 T^3  [Bogensekunden]
z = 2306.2181 T + 1.09468 T^2 + 0.018203 T^3  [Bogensekunden]
θ = 2004.3109 T - 0.42665 T^2 - 0.041833 T^3 [Bogensekunden]
Der geozentrische Standortvektor wird aus MPC-ρ-Faktoren oder geodätischer Länge, Breite und Höhe gebildet, mit scheinbarer Sternzeit rotiert und über Nutation sowie Präzession nach J2000 zurückgeführt.
8. Lichtlaufzeit und scheinbare Richtung
Der Erdzustand und Beobachter werden zur Empfangszeit bestimmt. Für die Emissionszeit wird höchstens fünfmal iteriert:
t_emit,0 = t_TDB
ρk = r_object(t_emit,k) - r_earth(t_TDB) - r_observer(t_UTC)
t_emit,k+1 = t_TDB - |ρk| * 0.0057755183
Abbruch: |t_emit,k+1 - t_emit,k| < 1e-12 Tag

RA  = normalize(atan2(ρy,ρx), 0, 2π)
Dec = atan2(ρz, sqrt(ρx^2+ρy^2))
9. Binärtabellen
Planetenblöcke sind von 2000 bis 2040 in neun überlappende Zeitabschnitte geteilt und verwenden 0,5 Tag Schrittweite. N16 verwendet ebenfalls neun Blöcke und exakt 1,9999817474948436 Tage. Die Überlappung erlaubt sichere Hermite-Interpolation an Abschnittsgrenzen. Alle Werte sind Little-Endian float64.
Datensatz	Zeitraum	Schritt	Inhalt	
Planeten	2000–2040	0,5 Tag	11 Körper: EMB, Erde, Mond, Merkur bis Pluto	
N16	2000–2040	1,9999817474948436 Tage	16 massereiche Asteroiden	

10. Extrembeispiele
Die nachfolgende Tabelle nennt UTC, eingefrorene JPL-Horizons-Referenz, die C-Port-Rechnung und den sphärisch genäherten Winkelabstand. Station A68 und dieselben nominalen Elemente wurden verwendet. Werte sind Grad.
Bahnform und Periheldistanz der sechs Prüffälle.
Objekt	Epoche JD	e	q AE	
433 Eros	2453311.5	0.2228078944584026	1.133355399799004	
C/2023 A3	2460448.5	1.000095309222603	0.3914300307809727	
2P Encke	2459847.5	0.8477496967533629	0.3379482792219925	
2I Borisov	2458853.5	3.356475782676596	2.006520878500843	
99942 Apophis	2459215.5	0.19152168935010219	0.74582704784665232	
367943 Duende	2456158.5	0.10812843436824709	0.893491631652941	

Perihelzeit und Orientierung der Bahnebene.
Objekt	Tp TDB	Ω °	ω °	i °	
433 Eros	2453371.5859943051	304.40102733795362	178.665326776373	10.8291838260782	
C/2023 A3	2460581.24084083	21.55947863619833	308.4917712569641	139.1121095087364	
2P Encke	2460239.6495185494	334.1935846036774	187.1342463695676	11.41227811179314	
2I Borisov	2458826.052845906	308.1477292269942	209.1236864378081	44.05264247909138	
99942 Apophis	2459101.0394224627	204.0389272089208	126.65205183685531	3.3367513200667558	
367943 Duende	2456261.554400227	147.2625010881184	271.08746874977783	10.33728752192523	

Nichtgravitative Parameter; null bedeutet, dass der jeweilige Term entfällt.
Objekt	A1 / A2 / A3	
433 Eros	0 / 0 / 0	
C/2023 A3	1.4218744044776211e-8 / 1.3486232284695711e-9 / 0	
2P Encke	2.34758107815004e-10 / -6.540690743894436e-13 / 0	
2I Borisov	4.8595882640274848e-8 / 1.8798986909513609e-8 / 2.8355032201284751e-9	
99942 Apophis	5e-13 / -2.9017666371531647e-14 / 0	
367943 Duende	0 / 0 / 0	

Eingefrorene JPL-Horizons-Referenzpositionen.
Objekt	UTC	JPL RA °	JPL Dec °	
433 Eros	2026-07-21 22:00:00	188.352878680	-15.485731924	
433 Eros	2026-07-22 22:00:00	189.033073621	-15.673602566	
433 Eros	2026-07-23 22:00:00	189.712493431	-15.860306533	
C/2023 A3	2026-07-21 22:00:00	270.131469713	20.765253967	
C/2023 A3	2026-07-22 22:00:00	269.997011490	20.710979861	
C/2023 A3	2026-07-23 22:00:00	269.864375552	20.655473422	
2P Encke	2026-07-21 22:00:00	22.086326480	16.151079557	
2P Encke	2026-07-22 22:00:00	22.204227929	16.258348832	
2P Encke	2026-07-23 22:00:00	22.318311808	16.365096989	
2I Borisov	2019-12-08 00:00:00	171.852537543	-17.895950115	
2I Borisov	2019-12-09 00:00:00	172.269466247	-18.665188729	
2I Borisov	2019-12-10 00:00:00	172.685173642	-19.435471809	
99942 Apophis	2029-04-13 20:30:00	162.187610650	-1.853259832	
99942 Apophis	2029-04-13 20:40:00	158.279644424	0.774049246	
99942 Apophis	2029-04-13 20:50:00	153.882081064	3.710242552	
99942 Apophis	2029-04-13 21:00:00	148.942949743	6.944475706	
367943 Duende	2013-02-15 19:15:00	180.339825182	-21.468034850	
367943 Duende	2013-02-15 19:20:00	180.569814701	-17.847154119	
367943 Duende	2013-02-15 19:25:00	180.799653390	-14.126076156	
367943 Duende	2013-02-15 19:30:00	181.029779486	-10.326525675	

Berechnete Positionen und sphärischer Winkelabstand zur Referenz.
Objekt	UTC	Kern RA °	Kern Dec °	Δ ″	
433 Eros	2026-07-21 22:00:00	188.352878496	-15.485732361	0.001696	
433 Eros	2026-07-22 22:00:00	189.033073460	-15.673603008	0.001687	
433 Eros	2026-07-23 22:00:00	189.712493295	-15.860306981	0.001680	
C/2023 A3	2026-07-21 22:00:00	270.131471956	20.765254400	0.007710	
C/2023 A3	2026-07-22 22:00:00	269.997013729	20.710980297	0.007701	
C/2023 A3	2026-07-23 22:00:00	269.864377787	20.655473860	0.007693	
2P Encke	2026-07-21 22:00:00	22.086326254	16.151079161	0.001626	
2P Encke	2026-07-22 22:00:00	22.204227701	16.258348433	0.001638	
2P Encke	2026-07-23 22:00:00	22.318311578	16.365096587	0.001650	
2I Borisov	2019-12-08 00:00:00	171.852535053	-17.895966055	0.058015	
2I Borisov	2019-12-09 00:00:00	172.269463755	-18.665203001	0.052076	
2I Borisov	2019-12-10 00:00:00	172.685171171	-19.435484512	0.046495	
99942 Apophis	2029-04-13 20:30:00	162.187667572	-1.853286529	0.226242	
99942 Apophis	2029-04-13 20:40:00	158.279702838	0.774021995	0.232031	
99942 Apophis	2029-04-13 20:50:00	153.882138225	3.710216547	0.225683	
99942 Apophis	2029-04-13 21:00:00	148.943005706	6.944451473	0.218189	
367943 Duende	2013-02-15 19:15:00	180.339837945	-21.468014339	0.085326	
367943 Duende	2013-02-15 19:20:00	180.569829577	-17.847141796	0.067577	
367943 Duende	2013-02-15 19:25:00	180.799668504	-14.126072752	0.054168	
367943 Duende	2013-02-15 19:30:00	181.029797039	-10.326531491	0.065598	

433 Eros prüft die gewöhnliche Ellipse. C/2023 A3 liegt fast auf der Parabel und enthält A1/A2. 2P/Encke ist ein periodischer Komet mit Nichtgravitation. 2I/Borisov erzwingt e=3,356475782676596 und A1/A2/A3. Apophis und Duende prüfen die rasche Richtungsänderung bei dichter Erdpassage.
11. Reproduzierbarkeit und Grenzen
 •	Die 1-Bogensekunden-Grenze gilt gegen dieselben eingefrorenen nominalen Elemente, nicht gegen eine später aktualisierte Bahnlösung.
 •	Die kurze Nutations-, Präzessions- und TDB-Näherung ist auf den dokumentierten Zeitraum und das angestrebte Genauigkeitsniveau zugeschnitten.
 •	Schaltsekunden nach der letzten eingebauten Stufe müssen vor Nutzung neuerer Epochen ergänzt werden.
 •	Die Tabellen decken 2000 bis 2040 ab; außerhalb dieses Bereichs ist ein neuer Datensatz erforderlich.
 •	Unsicherheitsellipse und Kovarianzfortpflanzung sind nicht Bestandteil dieses reinen Nominalkerns.
 •	Find_Orb ist kein Laufzeitbestandteil und wird nur privat als zusätzlicher lokaler Vergleich verwendet.
Anhang A. Vergleich der Programmiersprachen
Alle erfolgreichen Fassungen bestanden dieselben 20 Referenzzeilen. Die Genauigkeitstabelle ist alphabetisch nach Sprache sortiert. Die getrennte Geschwindigkeitstabelle ist nach der Medianzeit aufsteigend sortiert, also mit der schnellsten Fassung zuerst. Die Zeiten beziehen sich auf sechs Fälle, die je Sprache siebenmal in sprachübergreifend wechselnder Reihenfolge gerechnet wurden; sie zeigen auf diesem Rechner nur die relative Laufzeit.
A.1 Genauigkeit, alphabetisch
Maximaler sphärischer Winkelabstand über alle 20 Referenzzeilen.
Sprache	Max. Δ ″	Ergebnis	Quelle B	Paket B	Werkzeug	
Ada	0.223931	PASS	65.773	520.661	GNAT/GCC 15.2.0 (MSYS2)	
B4X	0.232382	PASS	63.915	550.906	B4J 10.50	
Ballerina	0.238317	PASS	54.944	546.455	Ballerina Swan Lake 2201.13.4	
BlitzMax	1.203843	PASS	91.196	549.418	BlitzMax NG 0.154.3.58	
C	0.232031	PASS	55.659	565.802	GCC 16.1.0	
C#	0.232031	PASS	50.345	545.734	.NET SDK 8.0.423	
C++	0.238317	PASS	56.461	546.717	Microsoft Visual C++ Community	
Clojure	0.235614	PASS	45.101	486.240	Clojure 1.12.5 / OpenJDK	
Common Lisp	0.223203	PASS	45.225	496.773	SBCL 2.6.6	
D	0.250215	PASS	38.210	514.240	DMD 2.112.0	
Dart	0.228185	PASS	42.668	538.284	Dart 3.12.2	
Delphi/Object Pascal	0.232316	PASS	56.636	524.660	Free Pascal 3.2.2	
Elixir	0.243787	PASS	53.273	575.919	Elixir 1.20.2 / Erlang OTP 29	
Erlang	0.243787	PASS	52.475	583.700	Erlang/OTP 29.0.3	
F#	0.216606	PASS	121.927	758.208	.NET SDK 8.0.423	
Factor	51.049773	PASS	43.312	493.140	Factor 0.101	
Fantom	0.238317	PASS	54.847	549.148	Fantom 1.0.83	
Fortran	0.226948	PASS	51.037	495.006	GNU Fortran 16.1.0	
FreeBASIC	0.252308	PASS	66.512	580.763	FreeBASIC 1.10.1	
GNU Octave	38.034360	PASS	35.427	503.786	GNU Octave 11.3.0	
Go	0.239381	PASS	39.667	526.531	Go 1.26.5	
Groovy	2.810988	PASS	47.731	586.421	Apache Groovy 5.0.2 / OpenJDK	
Haskell	0.259614	PASS	44.580	498.045	GHC 9.10.3	
Haxe	0.228185	PASS	46.913	533.441	Haxe 4.3.7	
Java	0.238317	PASS	46.825	548.599	Microsoft OpenJDK 25.0.3	
JavaScript	0.236219	PASS	107.767	592.039	Node.js 24.15.0 / Browser ES Modules	
Julia	0.229764	PASS	30.958	477.282	Julia 1.12.6	
Kotlin	0.238317	PASS	39.887	505.280	Kotlin 2.4.10 / OpenJDK	
Lua	0.216606	PASS	41.719	521.245	Lua 5.4	
Nim	0.228185	PASS	38.024	520.143	Nim 2.2.10	
OCaml	0.232382	PASS	119.362	724.314	OCaml 5.4.0	
Perl	0.236719	PASS	43.107	469.668	Perl 5	
PHP	0.232031	PASS	33.017	516.442	PHP 8.3.30 CLI	
PowerShell	37.997961	PASS	49.973	470.165	PowerShell 7.6.4	
Prolog	38.032226	PASS	55.733	632.243	SWI-Prolog 10.0.2	
Python	0.082129	PASS	218.903	787.360	Python 3.11.9	
R	0.231526	PASS	33.980	506.812	R 4.6.1	
Racket	0.218560	PASS	44.652	482.854	Racket 9.2	
Ruby	0.238317	PASS	37.165	506.816	Ruby 3.4	
Rust	0.228185	PASS	49.635	541.242	rustc 1.94.1	
Scala	0.238317	PASS	43.107	499.504	Scala CLI 1.15.0 / OpenJDK	
Smalltalk	42.792737	PASS	34.747	422.800	Pharo 12	
Squirrel	0.228185	PASS	44.919	530.616	Squirrel 3 with float64 build	
Tcl	0.232382	PASS	47.620	468.744	Tcl 8.6	
TypeScript + WebAssembly	0.239511	PASS	57.170	555.531	TypeScript 7.0.2, Rust WASI, Node.js 24.15.0	
V	0.236584	PASS	40.341	507.133	V 0.4	
Vala/Genie	0.228185	PASS	74.030	589.922	Vala 0.56	
Visual Basic .NET	0.232031	PASS	102.111	650.099	.NET SDK 8.0.423	
Zig	0.239824	PASS	44.555	524.110	Zig 0.16.0	

A.2 Geschwindigkeit, schnellste zuerst
Der Faktor 1,000 bezeichnet die schnellste Medianzeit des Prüflaufs.
Rang	Sprache	Minimum ms	Median ms	Maximum ms	Faktor	
1	TypeScript + WebAssembly	597.377	700.999	1047.449	1.000	
2	Fortran	596.688	750.360	1158.344	1.070	
3	Rust	523.705	823.898	1294.582	1.175	
4	B4X	775.000	971.000	2194.000	1.385	
5	Haxe	39.747	1077.578	2013.806	1.537	
6	Delphi/Object Pascal	937.000	1078.000	1672.000	1.538	
7	Zig	1035.454	1160.447	2320.055	1.655	
8	C++	1223.592	1441.870	2671.024	2.057	
9	Java	1284.711	1458.187	3353.160	2.080	
10	C	1343.938	1486.065	3056.110	2.120	
11	Kotlin	1176.612	1593.443	5530.074	2.273	
12	Ada	1460.014	1640.974	3057.029	2.341	
13	V	1575.736	1878.741	2571.347	2.680	
14	D	1546.526	1890.757	4220.870	2.697	
15	Go	1468.523	2141.171	9256.961	3.054	
16	Visual Basic .NET	1696.939	2216.958	3742.810	3.163	
17	F#	1783.725	2231.113	3564.241	3.183	
18	Nim	2119.599	2326.564	5060.611	3.319	
19	C#	2374.419	2552.401	6731.288	3.641	
20	Dart	2190.595	2733.704	5027.791	3.900	
21	Scala	2073.900	3242.849	7436.041	4.626	
22	OCaml	2669.212	3467.746	8892.401	4.947	
23	FreeBASIC	2767.911	3570.477	5810.864	5.093	
24	Julia	3434.719	4304.078	8335.834	6.140	
25	Fantom	4241.671	5794.304	8545.390	8.266	
26	Vala/Genie	4412.042	5820.308	8666.353	8.303	
27	Haskell	6047.352	8690.853	14693.710	12.398	
28	BlitzMax	7899.000	8742.000	12931.000	12.471	
29	JavaScript	7724.900	10157.720	23217.210	14.490	
30	Common Lisp	11056.269	14392.095	22933.360	20.531	
31	Ballerina	12341.616	16894.464	33663.612	24.101	
32	Racket	16694.584	21229.729	44060.672	30.285	
33	Erlang	19354.829	24802.406	45274.726	35.381	
34	Elixir	23434.035	29699.584	53299.712	42.367	
35	PHP	41451.985	49798.621	104949.488	71.039	
36	Prolog	49043.000	69317.000	255244.000	98.883	
37	Lua	53249.000	69977.000	130427.000	99.825	
38	Squirrel	55843.000	71891.000	119351.000	102.555	
39	Clojure	55241.707	72206.563	171065.047	103.005	
40	Ruby	66049.112	90263.925	168102.051	128.765	
41	Factor	70004.415	94462.332	151220.285	134.754	
42	Smalltalk	65113.000	95089.000	157550.000	135.648	
43	Groovy	68129.578	95282.139	143061.528	135.923	
44	Python	74058.281	138890.584	308314.450	198.132	
45	Perl	108115.457	154930.755	276448.215	221.014	
46	PowerShell	206315.845	250942.054	717706.460	357.978	
47	Tcl	202078.602	265143.768	494701.078	378.237	
48	R	168780.000	343730.000	910730.000	490.343	
49	GNU Octave	315324.607	419255.178	922894.954	598.082	

Anhang B. Lizenzabgrenzung
Der projektgeschriebene Rechenkern und die zugehörigen Generatoren und Hilfen stehen, soweit LICENSE-SCOPE.md sie erfasst, unter Apache License 2.0. Datentabellen, externe Ephemeriden, JPL-Kernel und Drittprogramme sind getrennt zu beurteilen. Eine Weitergabe muss LICENSE und NOTICE beilegen, Copyright- und Lizenzvermerke erhalten und geänderte Dateien kenntlich machen. Patentlizenz und Kündigungsregel ergeben sich aus Abschnitt 3 der Apache-Lizenz.
Projektwebseite: https://www.jostjahn.de/amrum-software/ephemeris/