Numerische Ephemeridenrechnung ============================== Mathematisches Verfahren, Konstanten, Reihen und sprachübergreifende Validierung Version 0.5.3 - 25. Juli 2026 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. Spalten: Fachbegriff | Bedeutung in diesem Artikel Zeile: Fachbegriff=Ephemeride | Bedeutung in diesem Artikel=Vorausberechnete Folge von Himmelspositionen und ergänzenden Größen für festgelegte Zeitpunkte und einen Beobachtungsort. Zeile: Fachbegriff=scheinbar | Bedeutung in diesem Artikel=Bezeichnet hier die Richtung nach Lichtlaufzeit, Erdrotation, Nutation und Präzession; atmosphärische Refraktion ist nicht Teil dieses Rechenkerns. Zeile: Fachbegriff=topozentrisch | Bedeutung in diesem Artikel=Auf den wirklichen Standort des Beobachters auf oder nahe der Erdoberfläche bezogen, nicht auf den Erdmittelpunkt. Zeile: Fachbegriff=geozentrisch / heliozentrisch | Bedeutung in diesem Artikel=Geozentrisch bedeutet auf den Erdmittelpunkt, heliozentrisch auf den Sonnenmittelpunkt bezogen. Zeile: Fachbegriff=Baryzentrum | Bedeutung in diesem Artikel=Gemeinsamer Massenschwerpunkt mehrerer Körper; EMB bezeichnet das Erde-Mond-Baryzentrum. Zeile: Fachbegriff=oskulierende Bahnelemente | Bedeutung in diesem Artikel=Sechs Elemente einer momentanen Keplerbahn, die Ort und Geschwindigkeit der tatsächlich gestörten Bahn an einer Epoche berührt. Zeile: Fachbegriff=Epoche | Bedeutung in diesem Artikel=Zeitpunkt, für den Bahnelemente oder ein Zustandsvektor gelten. Zeile: Fachbegriff=Kegelschnitt | Bedeutung in diesem Artikel=Ellipse, Parabel oder Hyperbel; die Exzentrizität e unterscheidet die drei Bahnformen. Zeile: Fachbegriff=Exzentrizität e | Bedeutung in diesem Artikel=Dimensionsloser Formparameter: e<1 Ellipse, e=1 Parabel und e>1 Hyperbel. Zeile: Fachbegriff=q, Tp, i, Ω, ω | Bedeutung in diesem Artikel=Periheldistanz, Perihelzeit, Bahnneigung, Länge des aufsteigenden Knotens und Argument des Perihels. Zeile: Fachbegriff=M, E, H, ν | Bedeutung in diesem Artikel=Mittlere, exzentrische, hyperbolische und wahre Anomalie; Winkel beziehungsweise Hilfsgröße für die Position auf der Bahn. Zeile: Fachbegriff=J2000 | Bedeutung in diesem Artikel=In diesem Kern die feste äquatoriale Bezugsorientierung zur Standardepoche JD 2451545.0. Zeile: Fachbegriff=AE | Bedeutung in diesem Artikel=Astronomische Einheit; exakt 149597870,7 Kilometer. Zeile: Fachbegriff=JD | Bedeutung in diesem Artikel=Julianisches Datum, eine fortlaufende astronomische Tageszählung. Zeile: Fachbegriff=UTC / TAI / TDB | Bedeutung in diesem Artikel=Koordinierte Weltzeit, Internationale Atomzeit und baryzentrische dynamische Zeit; UTC enthält Schaltsekunden, TDB dient der Dynamik. Zeile: Fachbegriff=Schaltsekunde | Bedeutung in diesem Artikel=Ganzzahlige Korrektur, die UTC an die ungleichmäßige Erdrotation bindet, während TAI gleichmäßig fortläuft. Zeile: Fachbegriff=Gravitationsparameter μ | Bedeutung in diesem Artikel=Produkt G·M aus Gravitationskonstante und Körpermasse. μ⊙ bezeichnet den Sonnenwert, μE den Erdwert. Zeile: Fachbegriff=Massenverhältnis ηb | Bedeutung in diesem Artikel=Verhältnis Mb/M⊙ eines Störkörpers zur Sonne; gleichbedeutend mit μb/μ⊙. Zeile: Fachbegriff=Störkörper | Bedeutung in diesem Artikel=Körper, dessen Gravitation die reine Zweikörperbahn zusätzlich beschleunigt. Zeile: Fachbegriff=direkter und indirekter Term | Bedeutung in diesem Artikel=Direkt wirkt der Störkörper auf das Objekt; indirekt wird die gleichzeitige Beschleunigung des heliozentrischen Ursprungs abgezogen. Zeile: Fachbegriff=N16 | Bedeutung in diesem Artikel=Optionaler Satz der 16 massereichsten Asteroiden, deren Störungen zusätzlich integriert werden. Zeile: Fachbegriff=kubische Hermite-Interpolation | Bedeutung in diesem Artikel=Polynominterpolation dritten Grades, die an beiden Tabellenknoten Position und Geschwindigkeit exakt übernimmt. Zeile: Fachbegriff=Little-Endian float64 | Bedeutung in diesem Artikel=Binärformat mit dem niederwertigsten Byte zuerst und 64-Bit-Gleitkommazahlen nach IEEE 754. Zeile: Fachbegriff=Runge-Kutta-Verfahren | Bedeutung in diesem Artikel=Einschrittverfahren, das mehrere Beschleunigungsauswertungen kombiniert, um den Zustand über einen Zeitschritt fortzuschreiben. Zeile: Fachbegriff=eingebettetes Verfahren | Bedeutung in diesem Artikel=Zwei Runge-Kutta-Lösungen verschiedener Ordnung benutzen dieselben Stufen; ihre Differenz schätzt den lokalen Fehler. Zeile: Fachbegriff=Dormand-Prince 5(4) | Bedeutung in diesem Artikel=Eingebettetes Runge-Kutta-Paar fünfter und vierter Ordnung mit sieben Stufen. Zeile: Fachbegriff=Butcher-Tafel | Bedeutung in diesem Artikel=Tabellarische Anordnung der Runge-Kutta-Koeffizienten ci, aij und bi; sie legt Stufenzeitpunkte, Zwischenzustände und Endgewichte vollständig fest. Zeile: Fachbegriff=lokaler Fehler | Bedeutung in diesem Artikel=Geschätzter Fehler eines einzelnen Integrationsschritts, hier aus der Differenz der Lösungen fünfter und vierter Ordnung. Zeile: Fachbegriff=adaptive Schrittweite | Bedeutung in diesem Artikel=Automatische Verkleinerung oder Vergrößerung des Zeitschritts anhand der normierten Fehlerschätzung. Zeile: Fachbegriff=RMS | Bedeutung in diesem Artikel=Quadratischer Mittelwert; hier die Wurzel aus dem Mittel der sechs quadrierten, skalierten Komponentenfehler. Zeile: Fachbegriff=clamp | Bedeutung in diesem Artikel=Begrenzung eines Zahlenwerts auf ein geschlossenes Minimum-Maximum-Intervall. Zeile: Fachbegriff=Lichtlaufzeit | Bedeutung in diesem Artikel=Zeit, die das Licht vom Objekt zum Beobachter benötigt; sie verschiebt die ausgewertete Emissionszeit. Zeile: Fachbegriff=Präzession / Nutation | Bedeutung in diesem Artikel=Langsame säkulare beziehungsweise kürzerperiodische Änderung der Orientierung der Erdachse. Zeile: Fachbegriff=GMST | Bedeutung in diesem Artikel=Mittlere Greenwich-Sternzeit, also der aus UTC abgeleitete Rotationswinkel der Erde relativ zum mittleren Himmelsbezug. Zeile: Fachbegriff=Erd-J2 | Bedeutung in diesem Artikel=Führender Koeffizient der Abplattung des Erdschwerefelds gegenüber einer idealen Punktmasse. Zeile: Fachbegriff=Marsden A1/A2/A3 | Bedeutung in diesem Artikel=Empirische nichtgravitative Beschleunigungen eines Kometen in radialer, transversaler und normaler Richtung. Zeile: Fachbegriff=RA / Deklination | Bedeutung in diesem Artikel=Rektaszension und Deklination; das äquatoriale Koordinatenpaar der scheinbaren Himmelsrichtung. Zeile: Fachbegriff=MPC-ρ-Faktoren | Bedeutung in diesem Artikel=Vom Minor Planet Center verwendete dimensionslose Stationsfaktoren für Abstand von Erdachse und Äquatorebene. Zeile: Fachbegriff=Bogensekunde | Bedeutung in diesem Artikel=1/3600 Grad; das Zeichen ″ kennzeichnet diese Winkeleinheit. Zeile: Fachbegriff=Referenzephemeride / Residuum | Bedeutung in diesem Artikel=Vergleichsposition aus JPL Horizons beziehungsweise der verbleibende sphärische Winkelabstand zur Kernrechnung. Zeile: Fachbegriff=Kovarianzfortpflanzung | Bedeutung in diesem Artikel=Fortrechnung statistischer Unsicherheiten und Korrelationen einer Bahnlösung; sie gehört nicht zum dokumentierten Nominalkern. Zeile: Fachbegriff=Abnahmetest | Bedeutung in diesem Artikel=Festgelegter Vergleich, dessen Grenzwert ein Port für die Freigabe einhalten muss. Die Symbole μ⊙ und μE werden im gesamten Artikel eindeutig unterschieden. Spalten: Symbol | Bedeutung | Wert oder Einheit Zeile: Symbol=μ⊙ = G·M⊙ | Bedeutung=Heliozentrischer Gravitationsparameter der Sonne | Wert oder Einheit=0.0002959122082855911 AE³/Tag² Zeile: Symbol=μE = G·ME | Bedeutung=Geozentrischer Gravitationsparameter der Erde | Wert oder Einheit=8.887692445125148326e-10 AE³/Tag² Zeile: Symbol=μMond = G·MMond | Bedeutung=Gravitationsparameter des Mondes | Wert oder Einheit=1.09318946230584718e-11 AE³/Tag² Zeile: Symbol=ηb = μb/μ⊙ | Bedeutung=Massenverhältnis eines Störkörpers b zur Sonne | Wert oder Einheit=dimensionslos Zeile: Symbol=r, v, a | Bedeutung=Orts-, Geschwindigkeits- und Beschleunigungsvektor | Wert oder Einheit=AE; AE/Tag; AE/Tag² Zeile: Symbol=t0, Tp, Δ | Bedeutung=Elementepoche, Perihelzeit und Differenz t0−Tp | Wert oder Einheit=JD beziehungsweise Tage Zeile: Symbol=q, a, p, e | Bedeutung=Periheldistanz, große Halbachse, Bahnparameter und Exzentrizität | Wert oder Einheit=AE beziehungsweise dimensionslos Zeile: Symbol=M, E, H, ν | Bedeutung=Mittlere, exzentrische, hyperbolische und wahre Anomalie | Wert oder Einheit=Radiant Zeile: Symbol=Ω, ω, i | Bedeutung=Knotenlänge, Perihelargument und Inklination | Wert oder Einheit=Grad bei Eingabe, intern Radiant Zeile: Symbol=c | Bedeutung=Lichtgeschwindigkeit | Wert oder Einheit=173.144632674240 AE/Tag Zeile: Symbol=ρ | Bedeutung=Topozentrischer Objektvektor beziehungsweise im J2-Abschnitt Erdabstand | Wert oder Einheit=AE Zeile: Symbol=J2, RE | Bedeutung=Erdabplattungskoeffizient und Äquatorradius | Wert oder Einheit=dimensionslos beziehungsweise AE Zeile: Symbol=A1, A2, A3 | Bedeutung=Nichtgravitative Marsden-Parameter | Wert oder Einheit=AE/Tag² Zeile: Symbol=T | Bedeutung=Julianische Jahrhunderte seit J2000 | Wert oder Einheit=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⊙. Spalten: Symbol | Exakter Wert | Einheit Zeile: Symbol=π | Exakter Wert=3.141592653589793238462643383279502884 | Einheit=dimensionslos Zeile: Symbol=AE | Exakter Wert=149597870.7 | Einheit=km Zeile: Symbol=μ⊙ = G·M⊙ | Exakter Wert=0.0002959122082855911 | Einheit=AE³/Tag² Zeile: Symbol=μE = G·ME | Exakter Wert=8.887692445125148326e-10 | Einheit=AE³/Tag² Zeile: Symbol=μMond = G·MMond | Exakter Wert=1.09318946230584718e-11 | Einheit=AE³/Tag² Zeile: Symbol=Lichtgeschwindigkeit | Exakter Wert=173.144632674240 | Einheit=AE/Tag Zeile: Symbol=Lichtlaufzeit | Exakter Wert=0.0057755183 | Einheit=Tag/AE Zeile: Symbol=Masse Erde/Sonne | Exakter Wert=3.0034896149156e-6 | Einheit=dimensionslos Zeile: Symbol=Masse Mond/Sonne | Exakter Wert=3.6943033497651e-8 | Einheit=dimensionslos Zeile: Symbol=Erdradius | Exakter Wert=6378.1363 / 149597870.7 | Einheit=AE Zeile: Symbol=J2 Erde | Exakter Wert=1.08262668e-3 | Einheit=dimensionslos Zeile: Symbol=Schiefe J2000 | Exakter Wert=84381.448 | Einheit=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 Spalten: Störkörper | Masse/Sonnenmasse Zeile: Störkörper=Merkur | Masse/Sonnenmasse=1.660114153054348e-7 Zeile: Störkörper=Venus | Masse/Sonnenmasse=2.447838287784771e-6 Zeile: Störkörper=Mars | Masse/Sonnenmasse=3.227156037554996e-7 Zeile: Störkörper=Jupiter | Masse/Sonnenmasse=9.547919101886966e-4 Zeile: Störkörper=Saturn | Masse/Sonnenmasse=2.858856727222416e-4 Zeile: Störkörper=Uranus | Masse/Sonnenmasse=4.366249662744965e-5 Zeile: Störkörper=Neptun | Masse/Sonnenmasse=5.151383772628673e-5 Zeile: Störkörper=Pluto | Masse/Sonnenmasse=7.350487833457740e-9 Spalten: N16-Körper | Masse/Sonnenmasse Zeile: N16-Körper=Ceres | Masse/Sonnenmasse=4.719154706681575e-10 Zeile: N16-Körper=Pallas | Masse/Sonnenmasse=1.0297360324108826e-10 Zeile: N16-Körper=Juno | Masse/Sonnenmasse=1.4471670474939703e-11 Zeile: N16-Körper=Vesta | Masse/Sonnenmasse=1.3026875547328177e-10 Zeile: N16-Körper=Iris | Masse/Sonnenmasse=8.589038999387399e-12 Zeile: N16-Körper=Hygiea | Masse/Sonnenmasse=4.238598614896659e-11 Zeile: N16-Körper=Eunomia | Masse/Sonnenmasse=1.5243642468487352e-11 Zeile: N16-Körper=Psyche | Masse/Sonnenmasse=1.1978215785019767e-11 Zeile: N16-Körper=Euphrosyne | Masse/Sonnenmasse=8.133159614634648e-12 Zeile: N16-Körper=Europa | Masse/Sonnenmasse=2.0216913527078825e-11 Zeile: N16-Körper=Cybele | Masse/Sonnenmasse=7.06871003275745e-12 Zeile: N16-Körper=Sylvia | Masse/Sonnenmasse=1.6337820878172953e-11 Zeile: N16-Körper=Thisbe | Masse/Sonnenmasse=8.965306556356798e-12 Zeile: N16-Körper=Camilla | Masse/Sonnenmasse=1.0878696848144257e-11 Zeile: N16-Körper=Davida | Masse/Sonnenmasse=2.9345275747768696e-11 Zeile: N16-Körper=Interamnia | Masse/Sonnenmasse=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. Spalten: Datensatz | Zeitraum | Schritt | Inhalt Zeile: Datensatz=Planeten | Zeitraum=2000–2040 | Schritt=0,5 Tag | Inhalt=11 Körper: EMB, Erde, Mond, Merkur bis Pluto Zeile: Datensatz=N16 | Zeitraum=2000–2040 | Schritt=1,9999817474948436 Tage | Inhalt=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. Spalten: Objekt | Epoche JD | e | q AE Zeile: Objekt=433 Eros | Epoche JD=2453311.5 | e=0.2228078944584026 | q AE=1.133355399799004 Zeile: Objekt=C/2023 A3 | Epoche JD=2460448.5 | e=1.000095309222603 | q AE=0.3914300307809727 Zeile: Objekt=2P Encke | Epoche JD=2459847.5 | e=0.8477496967533629 | q AE=0.3379482792219925 Zeile: Objekt=2I Borisov | Epoche JD=2458853.5 | e=3.356475782676596 | q AE=2.006520878500843 Zeile: Objekt=99942 Apophis | Epoche JD=2459215.5 | e=0.19152168935010219 | q AE=0.74582704784665232 Zeile: Objekt=367943 Duende | Epoche JD=2456158.5 | e=0.10812843436824709 | q AE=0.893491631652941 Perihelzeit und Orientierung der Bahnebene. Spalten: Objekt | Tp TDB | Ω ° | ω ° | i ° Zeile: Objekt=433 Eros | Tp TDB=2453371.5859943051 | Ω °=304.40102733795362 | ω °=178.665326776373 | i °=10.8291838260782 Zeile: Objekt=C/2023 A3 | Tp TDB=2460581.24084083 | Ω °=21.55947863619833 | ω °=308.4917712569641 | i °=139.1121095087364 Zeile: Objekt=2P Encke | Tp TDB=2460239.6495185494 | Ω °=334.1935846036774 | ω °=187.1342463695676 | i °=11.41227811179314 Zeile: Objekt=2I Borisov | Tp TDB=2458826.052845906 | Ω °=308.1477292269942 | ω °=209.1236864378081 | i °=44.05264247909138 Zeile: Objekt=99942 Apophis | Tp TDB=2459101.0394224627 | Ω °=204.0389272089208 | ω °=126.65205183685531 | i °=3.3367513200667558 Zeile: Objekt=367943 Duende | Tp TDB=2456261.554400227 | Ω °=147.2625010881184 | ω °=271.08746874977783 | i °=10.33728752192523 Nichtgravitative Parameter; null bedeutet, dass der jeweilige Term entfällt. Spalten: Objekt | A1 / A2 / A3 Zeile: Objekt=433 Eros | A1 / A2 / A3=0 / 0 / 0 Zeile: Objekt=C/2023 A3 | A1 / A2 / A3=1.4218744044776211e-8 / 1.3486232284695711e-9 / 0 Zeile: Objekt=2P Encke | A1 / A2 / A3=2.34758107815004e-10 / -6.540690743894436e-13 / 0 Zeile: Objekt=2I Borisov | A1 / A2 / A3=4.8595882640274848e-8 / 1.8798986909513609e-8 / 2.8355032201284751e-9 Zeile: Objekt=99942 Apophis | A1 / A2 / A3=5e-13 / -2.9017666371531647e-14 / 0 Zeile: Objekt=367943 Duende | A1 / A2 / A3=0 / 0 / 0 Eingefrorene JPL-Horizons-Referenzpositionen. Spalten: Objekt | UTC | JPL RA ° | JPL Dec ° Zeile: Objekt=433 Eros | UTC=2026-07-21 22:00:00 | JPL RA °=188.352878680 | JPL Dec °=-15.485731924 Zeile: Objekt=433 Eros | UTC=2026-07-22 22:00:00 | JPL RA °=189.033073621 | JPL Dec °=-15.673602566 Zeile: Objekt=433 Eros | UTC=2026-07-23 22:00:00 | JPL RA °=189.712493431 | JPL Dec °=-15.860306533 Zeile: Objekt=C/2023 A3 | UTC=2026-07-21 22:00:00 | JPL RA °=270.131469713 | JPL Dec °=20.765253967 Zeile: Objekt=C/2023 A3 | UTC=2026-07-22 22:00:00 | JPL RA °=269.997011490 | JPL Dec °=20.710979861 Zeile: Objekt=C/2023 A3 | UTC=2026-07-23 22:00:00 | JPL RA °=269.864375552 | JPL Dec °=20.655473422 Zeile: Objekt=2P Encke | UTC=2026-07-21 22:00:00 | JPL RA °=22.086326480 | JPL Dec °=16.151079557 Zeile: Objekt=2P Encke | UTC=2026-07-22 22:00:00 | JPL RA °=22.204227929 | JPL Dec °=16.258348832 Zeile: Objekt=2P Encke | UTC=2026-07-23 22:00:00 | JPL RA °=22.318311808 | JPL Dec °=16.365096989 Zeile: Objekt=2I Borisov | UTC=2019-12-08 00:00:00 | JPL RA °=171.852537543 | JPL Dec °=-17.895950115 Zeile: Objekt=2I Borisov | UTC=2019-12-09 00:00:00 | JPL RA °=172.269466247 | JPL Dec °=-18.665188729 Zeile: Objekt=2I Borisov | UTC=2019-12-10 00:00:00 | JPL RA °=172.685173642 | JPL Dec °=-19.435471809 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 20:30:00 | JPL RA °=162.187610650 | JPL Dec °=-1.853259832 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 20:40:00 | JPL RA °=158.279644424 | JPL Dec °=0.774049246 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 20:50:00 | JPL RA °=153.882081064 | JPL Dec °=3.710242552 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 21:00:00 | JPL RA °=148.942949743 | JPL Dec °=6.944475706 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:15:00 | JPL RA °=180.339825182 | JPL Dec °=-21.468034850 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:20:00 | JPL RA °=180.569814701 | JPL Dec °=-17.847154119 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:25:00 | JPL RA °=180.799653390 | JPL Dec °=-14.126076156 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:30:00 | JPL RA °=181.029779486 | JPL Dec °=-10.326525675 Berechnete Positionen und sphärischer Winkelabstand zur Referenz. Spalten: Objekt | UTC | Kern RA ° | Kern Dec ° | Δ ″ Zeile: Objekt=433 Eros | UTC=2026-07-21 22:00:00 | Kern RA °=188.352878496 | Kern Dec °=-15.485732361 | Δ ″=0.001696 Zeile: Objekt=433 Eros | UTC=2026-07-22 22:00:00 | Kern RA °=189.033073460 | Kern Dec °=-15.673603008 | Δ ″=0.001687 Zeile: Objekt=433 Eros | UTC=2026-07-23 22:00:00 | Kern RA °=189.712493295 | Kern Dec °=-15.860306981 | Δ ″=0.001680 Zeile: Objekt=C/2023 A3 | UTC=2026-07-21 22:00:00 | Kern RA °=270.131471956 | Kern Dec °=20.765254400 | Δ ″=0.007710 Zeile: Objekt=C/2023 A3 | UTC=2026-07-22 22:00:00 | Kern RA °=269.997013729 | Kern Dec °=20.710980297 | Δ ″=0.007701 Zeile: Objekt=C/2023 A3 | UTC=2026-07-23 22:00:00 | Kern RA °=269.864377787 | Kern Dec °=20.655473860 | Δ ″=0.007693 Zeile: Objekt=2P Encke | UTC=2026-07-21 22:00:00 | Kern RA °=22.086326254 | Kern Dec °=16.151079161 | Δ ″=0.001626 Zeile: Objekt=2P Encke | UTC=2026-07-22 22:00:00 | Kern RA °=22.204227701 | Kern Dec °=16.258348433 | Δ ″=0.001638 Zeile: Objekt=2P Encke | UTC=2026-07-23 22:00:00 | Kern RA °=22.318311578 | Kern Dec °=16.365096587 | Δ ″=0.001650 Zeile: Objekt=2I Borisov | UTC=2019-12-08 00:00:00 | Kern RA °=171.852535053 | Kern Dec °=-17.895966055 | Δ ″=0.058015 Zeile: Objekt=2I Borisov | UTC=2019-12-09 00:00:00 | Kern RA °=172.269463755 | Kern Dec °=-18.665203001 | Δ ″=0.052076 Zeile: Objekt=2I Borisov | UTC=2019-12-10 00:00:00 | Kern RA °=172.685171171 | Kern Dec °=-19.435484512 | Δ ″=0.046495 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 20:30:00 | Kern RA °=162.187667572 | Kern Dec °=-1.853286529 | Δ ″=0.226242 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 20:40:00 | Kern RA °=158.279702838 | Kern Dec °=0.774021995 | Δ ″=0.232031 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 20:50:00 | Kern RA °=153.882138225 | Kern Dec °=3.710216547 | Δ ″=0.225683 Zeile: Objekt=99942 Apophis | UTC=2029-04-13 21:00:00 | Kern RA °=148.943005706 | Kern Dec °=6.944451473 | Δ ″=0.218189 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:15:00 | Kern RA °=180.339837945 | Kern Dec °=-21.468014339 | Δ ″=0.085326 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:20:00 | Kern RA °=180.569829577 | Kern Dec °=-17.847141796 | Δ ″=0.067577 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:25:00 | Kern RA °=180.799668504 | Kern Dec °=-14.126072752 | Δ ″=0.054168 Zeile: Objekt=367943 Duende | UTC=2013-02-15 19:30:00 | Kern RA °=181.029797039 | Kern Dec °=-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. Spalten: Sprache | Max. Δ ″ | Ergebnis | Quelle B | Paket B | Werkzeug Zeile: Sprache=Ada | Max. Δ ″=0.223931 | Ergebnis=PASS | Quelle B=65.773 | Paket B=520.661 | Werkzeug=GNAT/GCC 15.2.0 (MSYS2) Zeile: Sprache=B4X | Max. Δ ″=0.232382 | Ergebnis=PASS | Quelle B=63.915 | Paket B=550.906 | Werkzeug=B4J 10.50 Zeile: Sprache=Ballerina | Max. Δ ″=0.238317 | Ergebnis=PASS | Quelle B=54.944 | Paket B=546.455 | Werkzeug=Ballerina Swan Lake 2201.13.4 Zeile: Sprache=BlitzMax | Max. Δ ″=1.203843 | Ergebnis=PASS | Quelle B=91.196 | Paket B=549.418 | Werkzeug=BlitzMax NG 0.154.3.58 Zeile: Sprache=C | Max. Δ ″=0.232031 | Ergebnis=PASS | Quelle B=55.659 | Paket B=565.802 | Werkzeug=GCC 16.1.0 Zeile: Sprache=C# | Max. Δ ″=0.232031 | Ergebnis=PASS | Quelle B=50.345 | Paket B=545.734 | Werkzeug=.NET SDK 8.0.423 Zeile: Sprache=C++ | Max. Δ ″=0.238317 | Ergebnis=PASS | Quelle B=56.461 | Paket B=546.717 | Werkzeug=Microsoft Visual C++ Community Zeile: Sprache=Clojure | Max. Δ ″=0.235614 | Ergebnis=PASS | Quelle B=45.101 | Paket B=486.240 | Werkzeug=Clojure 1.12.5 / OpenJDK Zeile: Sprache=Common Lisp | Max. Δ ″=0.223203 | Ergebnis=PASS | Quelle B=45.225 | Paket B=496.773 | Werkzeug=SBCL 2.6.6 Zeile: Sprache=D | Max. Δ ″=0.250215 | Ergebnis=PASS | Quelle B=38.210 | Paket B=514.240 | Werkzeug=DMD 2.112.0 Zeile: Sprache=Dart | Max. Δ ″=0.228185 | Ergebnis=PASS | Quelle B=42.668 | Paket B=538.284 | Werkzeug=Dart 3.12.2 Zeile: Sprache=Delphi/Object Pascal | Max. Δ ″=0.232316 | Ergebnis=PASS | Quelle B=56.636 | Paket B=524.660 | Werkzeug=Free Pascal 3.2.2 Zeile: Sprache=Elixir | Max. Δ ″=0.243787 | Ergebnis=PASS | Quelle B=53.273 | Paket B=575.919 | Werkzeug=Elixir 1.20.2 / Erlang OTP 29 Zeile: Sprache=Erlang | Max. Δ ″=0.243787 | Ergebnis=PASS | Quelle B=52.475 | Paket B=583.700 | Werkzeug=Erlang/OTP 29.0.3 Zeile: Sprache=F# | Max. Δ ″=0.216606 | Ergebnis=PASS | Quelle B=121.927 | Paket B=758.208 | Werkzeug=.NET SDK 8.0.423 Zeile: Sprache=Factor | Max. Δ ″=51.049773 | Ergebnis=PASS | Quelle B=43.312 | Paket B=493.140 | Werkzeug=Factor 0.101 Zeile: Sprache=Fantom | Max. Δ ″=0.238317 | Ergebnis=PASS | Quelle B=54.847 | Paket B=549.148 | Werkzeug=Fantom 1.0.83 Zeile: Sprache=Fortran | Max. Δ ″=0.226948 | Ergebnis=PASS | Quelle B=51.037 | Paket B=495.006 | Werkzeug=GNU Fortran 16.1.0 Zeile: Sprache=FreeBASIC | Max. Δ ″=0.252308 | Ergebnis=PASS | Quelle B=66.512 | Paket B=580.763 | Werkzeug=FreeBASIC 1.10.1 Zeile: Sprache=GNU Octave | Max. Δ ″=38.034360 | Ergebnis=PASS | Quelle B=35.427 | Paket B=503.786 | Werkzeug=GNU Octave 11.3.0 Zeile: Sprache=Go | Max. Δ ″=0.239381 | Ergebnis=PASS | Quelle B=39.667 | Paket B=526.531 | Werkzeug=Go 1.26.5 Zeile: Sprache=Groovy | Max. Δ ″=2.810988 | Ergebnis=PASS | Quelle B=47.731 | Paket B=586.421 | Werkzeug=Apache Groovy 5.0.2 / OpenJDK Zeile: Sprache=Haskell | Max. Δ ″=0.259614 | Ergebnis=PASS | Quelle B=44.580 | Paket B=498.045 | Werkzeug=GHC 9.10.3 Zeile: Sprache=Haxe | Max. Δ ″=0.228185 | Ergebnis=PASS | Quelle B=46.913 | Paket B=533.441 | Werkzeug=Haxe 4.3.7 Zeile: Sprache=Java | Max. Δ ″=0.238317 | Ergebnis=PASS | Quelle B=46.825 | Paket B=548.599 | Werkzeug=Microsoft OpenJDK 25.0.3 Zeile: Sprache=JavaScript | Max. Δ ″=0.236219 | Ergebnis=PASS | Quelle B=107.767 | Paket B=592.039 | Werkzeug=Node.js 24.15.0 / Browser ES Modules Zeile: Sprache=Julia | Max. Δ ″=0.229764 | Ergebnis=PASS | Quelle B=30.958 | Paket B=477.282 | Werkzeug=Julia 1.12.6 Zeile: Sprache=Kotlin | Max. Δ ″=0.238317 | Ergebnis=PASS | Quelle B=39.887 | Paket B=505.280 | Werkzeug=Kotlin 2.4.10 / OpenJDK Zeile: Sprache=Lua | Max. Δ ″=0.216606 | Ergebnis=PASS | Quelle B=41.719 | Paket B=521.245 | Werkzeug=Lua 5.4 Zeile: Sprache=Nim | Max. Δ ″=0.228185 | Ergebnis=PASS | Quelle B=38.024 | Paket B=520.143 | Werkzeug=Nim 2.2.10 Zeile: Sprache=OCaml | Max. Δ ″=0.232382 | Ergebnis=PASS | Quelle B=119.362 | Paket B=724.314 | Werkzeug=OCaml 5.4.0 Zeile: Sprache=Perl | Max. Δ ″=0.236719 | Ergebnis=PASS | Quelle B=43.107 | Paket B=469.668 | Werkzeug=Perl 5 Zeile: Sprache=PHP | Max. Δ ″=0.232031 | Ergebnis=PASS | Quelle B=33.017 | Paket B=516.442 | Werkzeug=PHP 8.3.30 CLI Zeile: Sprache=PowerShell | Max. Δ ″=37.997961 | Ergebnis=PASS | Quelle B=49.973 | Paket B=470.165 | Werkzeug=PowerShell 7.6.4 Zeile: Sprache=Prolog | Max. Δ ″=38.032226 | Ergebnis=PASS | Quelle B=55.733 | Paket B=632.243 | Werkzeug=SWI-Prolog 10.0.2 Zeile: Sprache=Python | Max. Δ ″=0.082129 | Ergebnis=PASS | Quelle B=218.903 | Paket B=787.360 | Werkzeug=Python 3.11.9 Zeile: Sprache=R | Max. Δ ″=0.231526 | Ergebnis=PASS | Quelle B=33.980 | Paket B=506.812 | Werkzeug=R 4.6.1 Zeile: Sprache=Racket | Max. Δ ″=0.218560 | Ergebnis=PASS | Quelle B=44.652 | Paket B=482.854 | Werkzeug=Racket 9.2 Zeile: Sprache=Ruby | Max. Δ ″=0.238317 | Ergebnis=PASS | Quelle B=37.165 | Paket B=506.816 | Werkzeug=Ruby 3.4 Zeile: Sprache=Rust | Max. Δ ″=0.228185 | Ergebnis=PASS | Quelle B=49.635 | Paket B=541.242 | Werkzeug=rustc 1.94.1 Zeile: Sprache=Scala | Max. Δ ″=0.238317 | Ergebnis=PASS | Quelle B=43.107 | Paket B=499.504 | Werkzeug=Scala CLI 1.15.0 / OpenJDK Zeile: Sprache=Smalltalk | Max. Δ ″=42.792737 | Ergebnis=PASS | Quelle B=34.747 | Paket B=422.800 | Werkzeug=Pharo 12 Zeile: Sprache=Squirrel | Max. Δ ″=0.228185 | Ergebnis=PASS | Quelle B=44.919 | Paket B=530.616 | Werkzeug=Squirrel 3 with float64 build Zeile: Sprache=Tcl | Max. Δ ″=0.232382 | Ergebnis=PASS | Quelle B=47.620 | Paket B=468.744 | Werkzeug=Tcl 8.6 Zeile: Sprache=TypeScript + WebAssembly | Max. Δ ″=0.239511 | Ergebnis=PASS | Quelle B=57.170 | Paket B=555.531 | Werkzeug=TypeScript 7.0.2, Rust WASI, Node.js 24.15.0 Zeile: Sprache=V | Max. Δ ″=0.236584 | Ergebnis=PASS | Quelle B=40.341 | Paket B=507.133 | Werkzeug=V 0.4 Zeile: Sprache=Vala/Genie | Max. Δ ″=0.228185 | Ergebnis=PASS | Quelle B=74.030 | Paket B=589.922 | Werkzeug=Vala 0.56 Zeile: Sprache=Visual Basic .NET | Max. Δ ″=0.232031 | Ergebnis=PASS | Quelle B=102.111 | Paket B=650.099 | Werkzeug=.NET SDK 8.0.423 Zeile: Sprache=Zig | Max. Δ ″=0.239824 | Ergebnis=PASS | Quelle B=44.555 | Paket B=524.110 | Werkzeug=Zig 0.16.0 A.2 Geschwindigkeit, schnellste zuerst -------------------------------------- Der Faktor 1,000 bezeichnet die schnellste Medianzeit des Prüflaufs. Spalten: Rang | Sprache | Minimum ms | Median ms | Maximum ms | Faktor Zeile: Rang=1 | Sprache=TypeScript + WebAssembly | Minimum ms=597.377 | Median ms=700.999 | Maximum ms=1047.449 | Faktor=1.000 Zeile: Rang=2 | Sprache=Fortran | Minimum ms=596.688 | Median ms=750.360 | Maximum ms=1158.344 | Faktor=1.070 Zeile: Rang=3 | Sprache=Rust | Minimum ms=523.705 | Median ms=823.898 | Maximum ms=1294.582 | Faktor=1.175 Zeile: Rang=4 | Sprache=B4X | Minimum ms=775.000 | Median ms=971.000 | Maximum ms=2194.000 | Faktor=1.385 Zeile: Rang=5 | Sprache=Haxe | Minimum ms=39.747 | Median ms=1077.578 | Maximum ms=2013.806 | Faktor=1.537 Zeile: Rang=6 | Sprache=Delphi/Object Pascal | Minimum ms=937.000 | Median ms=1078.000 | Maximum ms=1672.000 | Faktor=1.538 Zeile: Rang=7 | Sprache=Zig | Minimum ms=1035.454 | Median ms=1160.447 | Maximum ms=2320.055 | Faktor=1.655 Zeile: Rang=8 | Sprache=C++ | Minimum ms=1223.592 | Median ms=1441.870 | Maximum ms=2671.024 | Faktor=2.057 Zeile: Rang=9 | Sprache=Java | Minimum ms=1284.711 | Median ms=1458.187 | Maximum ms=3353.160 | Faktor=2.080 Zeile: Rang=10 | Sprache=C | Minimum ms=1343.938 | Median ms=1486.065 | Maximum ms=3056.110 | Faktor=2.120 Zeile: Rang=11 | Sprache=Kotlin | Minimum ms=1176.612 | Median ms=1593.443 | Maximum ms=5530.074 | Faktor=2.273 Zeile: Rang=12 | Sprache=Ada | Minimum ms=1460.014 | Median ms=1640.974 | Maximum ms=3057.029 | Faktor=2.341 Zeile: Rang=13 | Sprache=V | Minimum ms=1575.736 | Median ms=1878.741 | Maximum ms=2571.347 | Faktor=2.680 Zeile: Rang=14 | Sprache=D | Minimum ms=1546.526 | Median ms=1890.757 | Maximum ms=4220.870 | Faktor=2.697 Zeile: Rang=15 | Sprache=Go | Minimum ms=1468.523 | Median ms=2141.171 | Maximum ms=9256.961 | Faktor=3.054 Zeile: Rang=16 | Sprache=Visual Basic .NET | Minimum ms=1696.939 | Median ms=2216.958 | Maximum ms=3742.810 | Faktor=3.163 Zeile: Rang=17 | Sprache=F# | Minimum ms=1783.725 | Median ms=2231.113 | Maximum ms=3564.241 | Faktor=3.183 Zeile: Rang=18 | Sprache=Nim | Minimum ms=2119.599 | Median ms=2326.564 | Maximum ms=5060.611 | Faktor=3.319 Zeile: Rang=19 | Sprache=C# | Minimum ms=2374.419 | Median ms=2552.401 | Maximum ms=6731.288 | Faktor=3.641 Zeile: Rang=20 | Sprache=Dart | Minimum ms=2190.595 | Median ms=2733.704 | Maximum ms=5027.791 | Faktor=3.900 Zeile: Rang=21 | Sprache=Scala | Minimum ms=2073.900 | Median ms=3242.849 | Maximum ms=7436.041 | Faktor=4.626 Zeile: Rang=22 | Sprache=OCaml | Minimum ms=2669.212 | Median ms=3467.746 | Maximum ms=8892.401 | Faktor=4.947 Zeile: Rang=23 | Sprache=FreeBASIC | Minimum ms=2767.911 | Median ms=3570.477 | Maximum ms=5810.864 | Faktor=5.093 Zeile: Rang=24 | Sprache=Julia | Minimum ms=3434.719 | Median ms=4304.078 | Maximum ms=8335.834 | Faktor=6.140 Zeile: Rang=25 | Sprache=Fantom | Minimum ms=4241.671 | Median ms=5794.304 | Maximum ms=8545.390 | Faktor=8.266 Zeile: Rang=26 | Sprache=Vala/Genie | Minimum ms=4412.042 | Median ms=5820.308 | Maximum ms=8666.353 | Faktor=8.303 Zeile: Rang=27 | Sprache=Haskell | Minimum ms=6047.352 | Median ms=8690.853 | Maximum ms=14693.710 | Faktor=12.398 Zeile: Rang=28 | Sprache=BlitzMax | Minimum ms=7899.000 | Median ms=8742.000 | Maximum ms=12931.000 | Faktor=12.471 Zeile: Rang=29 | Sprache=JavaScript | Minimum ms=7724.900 | Median ms=10157.720 | Maximum ms=23217.210 | Faktor=14.490 Zeile: Rang=30 | Sprache=Common Lisp | Minimum ms=11056.269 | Median ms=14392.095 | Maximum ms=22933.360 | Faktor=20.531 Zeile: Rang=31 | Sprache=Ballerina | Minimum ms=12341.616 | Median ms=16894.464 | Maximum ms=33663.612 | Faktor=24.101 Zeile: Rang=32 | Sprache=Racket | Minimum ms=16694.584 | Median ms=21229.729 | Maximum ms=44060.672 | Faktor=30.285 Zeile: Rang=33 | Sprache=Erlang | Minimum ms=19354.829 | Median ms=24802.406 | Maximum ms=45274.726 | Faktor=35.381 Zeile: Rang=34 | Sprache=Elixir | Minimum ms=23434.035 | Median ms=29699.584 | Maximum ms=53299.712 | Faktor=42.367 Zeile: Rang=35 | Sprache=PHP | Minimum ms=41451.985 | Median ms=49798.621 | Maximum ms=104949.488 | Faktor=71.039 Zeile: Rang=36 | Sprache=Prolog | Minimum ms=49043.000 | Median ms=69317.000 | Maximum ms=255244.000 | Faktor=98.883 Zeile: Rang=37 | Sprache=Lua | Minimum ms=53249.000 | Median ms=69977.000 | Maximum ms=130427.000 | Faktor=99.825 Zeile: Rang=38 | Sprache=Squirrel | Minimum ms=55843.000 | Median ms=71891.000 | Maximum ms=119351.000 | Faktor=102.555 Zeile: Rang=39 | Sprache=Clojure | Minimum ms=55241.707 | Median ms=72206.563 | Maximum ms=171065.047 | Faktor=103.005 Zeile: Rang=40 | Sprache=Ruby | Minimum ms=66049.112 | Median ms=90263.925 | Maximum ms=168102.051 | Faktor=128.765 Zeile: Rang=41 | Sprache=Factor | Minimum ms=70004.415 | Median ms=94462.332 | Maximum ms=151220.285 | Faktor=134.754 Zeile: Rang=42 | Sprache=Smalltalk | Minimum ms=65113.000 | Median ms=95089.000 | Maximum ms=157550.000 | Faktor=135.648 Zeile: Rang=43 | Sprache=Groovy | Minimum ms=68129.578 | Median ms=95282.139 | Maximum ms=143061.528 | Faktor=135.923 Zeile: Rang=44 | Sprache=Python | Minimum ms=74058.281 | Median ms=138890.584 | Maximum ms=308314.450 | Faktor=198.132 Zeile: Rang=45 | Sprache=Perl | Minimum ms=108115.457 | Median ms=154930.755 | Maximum ms=276448.215 | Faktor=221.014 Zeile: Rang=46 | Sprache=PowerShell | Minimum ms=206315.845 | Median ms=250942.054 | Maximum ms=717706.460 | Faktor=357.978 Zeile: Rang=47 | Sprache=Tcl | Minimum ms=202078.602 | Median ms=265143.768 | Maximum ms=494701.078 | Faktor=378.237 Zeile: Rang=48 | Sprache=R | Minimum ms=168780.000 | Median ms=343730.000 | Maximum ms=910730.000 | Faktor=490.343 Zeile: Rang=49 | Sprache=GNU Octave | Minimum ms=315324.607 | Median ms=419255.178 | Maximum ms=922894.954 | Faktor=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/