Precizia calculelor
Pe scurt
Section titled “Pe scurt”API-ul AstroWay utilizează Swiss Ephemeris (codul C oficial de la Astrodienst, creatorii astro.com) - același motor pe care astrologii profesioniști lucrează de peste 30 de ani în Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/lună) și Janus. Îl rulăm pe propriile noastre servere și îl oferim ca un strat REST API, fără adaosuri intermediare. Fiecare dintre endpoint-urile de calcul de bază este acoperit de teste de regresie snapshot; precizia motorului este verificată prin triangulare cu trei surse independente + împotriva Catalogului de Eclipse NASA 5-Millennium:
- Poziții planetare: mediana
0.0013", maximul0.561"vs. swetest CGI oficial Astrodienst (măsurat 2026-07-29 pe 130 de măsurători). Defalcare pe corpuri mai jos - Rulare independentă cu un benchmark extern (RoxyAPI, împotriva NASA JPL Horizons DE441): 210 din 210 în limitele toleranței, mediana
0.11", maximul0.60" - Cuspidele caselor Placidus:
0.000"potrivire exactă - Eclipse:
< 1 minutvs. Catalogul de Eclipse NASA - Linii ACG:
< 1.5 kmla ecuator vs. swetest - Răsărit/apus de soare:
< 10 secundevs. timeanddate.com - VOC Lună, ingresuri, conjuncții planetare: precizie până la o fracțiune de secundă
Metodologie: cum a fost măsurat
Section titled “Metodologie: cum a fost măsurat”Aceste numere nu sunt o estimare, ci rezultatul unei rulări. Scriptul ia 10 hărți, împrăștiate între anii 1900 și 2050, interoghează aceleași momente în swetest CGI Astrodienst live și compară toate cele 13 corpuri pe care le returnăm. În total 130 de măsurători.
| Corp | Drift maxim |
|---|---|
| Soare, Venus, Saturn | 0.001" |
| Mercur | 0.002" |
| Nodul adevărat | 0.004" |
| Marte | 0.007" |
| Jupiter | 0.009" |
| Lună | 0.022" |
| Uranus | 0.083" |
| Pluto | 0.097" |
| Neptun | 0.223" |
| Chiron | 0.561" |
| Apogeu mediu (Lilith) | 0.000" |
Mediana pentru toate cele 130 de măsurători: 0.0013".
Anterior, pe această pagină exista o promisiune generală ”< 0.1 arcsec”. Măsurătorile din 2026-07-29 au arătat că Neptun, Pluto și Chiron nu o respectă, așa că promisiunea a fost înlocuită cu numerele reale. Chiron și planetele exterioare au un drift mai mare deoarece pozițiile lor sunt preluate dintr-un set comprimat de efemere, utilizat de build-ul nostru.
Poți reproduce singur: api-calc/scripts/accuracy-vs-swetest.mjs
efectuează exact aceste interogări și tipărește același tabel.
Verifică singur. Scriptul cu care au fost măsurate numerele de mai sus se află într-un depozit public sub licență MIT: astroway/astrology-accuracy-benchmark. Nu funcționează doar cu noi: un adaptor pentru orice alt API înseamnă treizeci de rânduri, așa că aceleași 130 de măsurători pot fi rulate împotriva unui concurent și comparate. O cheie de sandbox este suficientă.
| Componentă | Valoare |
|---|---|
| Bibliotecă | Swiss Ephemeris C code (aloistr/swisseph) |
| Versiune | upstream Astrodienst C code |
| Efemere | DE431 JPL ephemeris (prin fișiere .se1) |
| Mecanism de rezervă | Moshier analytical (pentru date în afara intervalului 1800-2399) |
| Partajare cod | Shared @/core cu app.astroway.info - un singur motor, două transporturi |
Metodologie
Section titled “Metodologie”Precizia este verificată prin triangulare - compararea cu trei surse independente:
1. swetest CGI (referință)
Section titled “1. swetest CGI (referință)”Implementarea de referință oficială Swiss Ephemeris de la Astrodienst înșiși - echipa care a creat Astro.com și deservește milioane de astrologi din întreaga lume. Cea mai autoritară sursă publică. Motorul nostru este identic (0.00–0.07 secunde de arc drift).
2. Kerykeion (Python)
Section titled “2. Kerykeion (Python)”O bibliotecă Python independentă folosește pyswisseph-bindings, independente de build-ul nostru.
Confirmă că stratul nostru de wrapper nu distorsionează datele.
3. Prokerala API
Section titled “3. Prokerala API”API-ul Swiss Ephemeris la distanță (sideral Lahiri). Driftul sistemic de 8–17 secunde de arc este legat de diferite versiuni ale formulei Lahiri ayanamsa, și nu de precizia motorului.
Rezultatele triangulării
Section titled “Rezultatele triangulării”| Hartă | vs. swetest (Astrodienst) | vs. Kerykeion (Python) | vs. Prokerala API |
|---|---|---|---|
| Monroe 1926 | 0.00” | 0.19” | 16.95” (sistemic) |
| Diana 1961 | 0.00” | 0.69” | 8.18” (sistemic) |
| Einstein 1879 | 0.07” | Artefact LMT Kerykeion | 14.96” (sistemic) |
Verificare independentă cu un instrument extern
Section titled “Verificare independentă cu un instrument extern”RoxyAPI publică propriul benchmark împotriva NASA JPL Horizons DE441: licență MIT,
doar biblioteca standard, 21 de hărți și 210 poziții, și flag-ul --base-url
pentru a-l ținti către orice alt API. În README-ul lor este menționat explicit că
toleranțele nu au fost ajustate intenționat pentru propriul lor motor, deoarece un benchmark
care propune verificarea unui concurent trebuie să fie onest.
L-am țintit către noi, fără a schimba niciun număr în codul lor. Adaptorul redenumește un câmp de cerere și elimină un wrapper de răspuns.
| AstroWay | RoxyAPI, rularea lor 2026-09-29 | |
|---|---|---|
| În limitele toleranței | 210 din 210 | 210 din 210 |
| Mediana deviației | 0.11" | 0.05" |
| Maximul | 0.60" | 0.78" |
Măsurătoarea noastră din 2026-09-09, cost 21 de cereri API. RoxyAPI a trecut în septembrie la citirea directă a DE440, iar mediana lor este acum mai mică decât a noastră; maximul nostru este mai mic decât al lor. Ieșirea secvențială a tuturor celor 210 rânduri: CSV.
Set de regresie la nivel de endpoint-uri
Section titled “Set de regresie la nivel de endpoint-uri”Fiecare dintre endpoint-urile de calcul de bază este acoperit de teste snapshot înghețate pe 3 hărți de referință (Monroe / Diana / Einstein) = 873 snapshot-uri.
Suita de snapshot-uri detectează:
- Bug-uri de mapare a datelor de intrare: ID planetă incorect, UT, sistem de case
- Post-procesare: rotunjire, conversie unități, pierdere de semn
- Divergența valorilor implicite: nod mediu vs nod adevărat, geocentric vs topocentric
- Schema drift: validarea a omis o formă incorectă
- Deploy învechit: distribuția de producție nu corespunde codului
Toleranță: 5e-5° (≈0.18 secunde de arc) implicit pentru toate câmpurile numerice.
Benchmark-uri detaliate
Section titled “Benchmark-uri detaliate”Poziții planetare (tropical, vs. swetest)
Section titled “Poziții planetare (tropical, vs. swetest)”| Hartă | Dată | Drift maxim |
|---|---|---|
| Marilyn Monroe | 1926-06-01 | 0.00” |
| Princess Diana | 1961-07-01 | 0.00” |
| Albert Einstein | 1879-03-14 | 0.07” |
Cuspidele caselor Placidus (vs. swetest)
Section titled “Cuspidele caselor Placidus (vs. swetest)”| Hartă | drift ASC | drift MC | Drift maxim cuspidă |
|---|---|---|---|
| Monroe | 0.000” | 0.000” | 0.000” |
| Diana | 0.000” | 0.000” | 0.000” |
Eclipse (vs. Catalogul NASA 5-Millennium)
Section titled “Eclipse (vs. Catalogul NASA 5-Millennium)”| Eveniment | Maxim NASA | Maximul nostru | Drift |
|---|---|---|---|
| 2025-03-14 Totală Lunară | 06:58 UT | 06:58 UT | 0.8 min |
| 2025-03-29 Parțială Solară | 10:47 UT | 10:47 UT | 0.5 min |
| 2025-09-07 Totală Lunară | 18:11 UT | 18:11 UT | 0.8 min |
| 2025-09-21 Parțială Solară | 19:41 UT | 19:42 UT | 1.0 min |
Astrocartografie (vs. formula RA din swetest)
Section titled “Astrocartografie (vs. formula RA din swetest)”Liniile MC și IC sunt construite conform formulei longitude = RA − GMST (standard Kenneth
Bowser). Drift față de referință: < 1.5 km la ecuator pentru toate planetele.
Liniile orizontale ASC și DSC sunt calculate din ecuația orizontului în aceleași
coordonate ecuatoriale: cos H = -tan φ · tan δ, unde H = (GMST + lng) − RA.
Cele două jumătăți diferă prin semnul unghiului orar: la H < 0 corpul este la est de meridian,
adică răsare. Verificarea pe care o rulăm la fiecare execuție: se ia fiecare
punct al fiecărei curbe orizontale și se calculează înălțimea corpului deasupra orizontului în acel punct.
La 8419 puncte, deviația maximă este de 0.0 km, adică corpul se află într-adevăr la
orizont oriunde am trasat linia.
Răsărit / Apus de Soare (vs. timeanddate.com)
Section titled “Răsărit / Apus de Soare (vs. timeanddate.com)”| Locație | Dată | Parametru | Drift |
|---|---|---|---|
| London | 2026-04-15 | Răsărit | 0.6 s |
| London | 2026-04-15 | Apus | 9 s |
Locațiile polare (|lat| > 66.5°) returnează automat polarState +
avertisment că orele planetare obișnuite nu sunt definite.
Orbe de aspecte
Section titled “Orbe de aspecte”AstroWay utilizează orbe variabile per-planetă (regula MIN a două planete), ca în ZET9 și astro.com. Orbe implicite (pentru harta natală):
| Aspect | Soare | Lună | Interioare | Jupiter | Exterioare |
|---|---|---|---|---|---|
| Conjuncție | 12° | 10° | 5° | 8° | 5° |
| Sextil | 6.5° | 6° | 5° | 5° | 5° |
| Cuadratură | 10° | 8° | 5° | 7° | 5° |
| Trigon | 12° | 8° | 5° | 5° | 5° |
| Opoziție | 12° | 10° | 5° | 8° | 5° |
Aspectele minore (36°, 40°, 45°, 72°, 108°, 135°, 144°) sunt dezactivate
implicit. Se activează explicit prin ALL_ASPECTS.
Latitudini polare
Section titled “Latitudini polare”Pentru |lat| > 66.5°, sistemele Placidus / Koch / Regiomontanus nu sunt definite matematic. În astfel de cazuri, Swiss Ephemeris returnează automat Porphyry, iar API-ul nostru adaugă un avertisment:
{ "system": "P", "warning": "Placidus system is undefined for lat=68.96° (> 66.5°). Swiss Ephemeris fell back to Porphyry..."}Verificare continuă
Section titled “Verificare continuă”Regresia este verificată la fiecare PR prin CI:
api-calc/tests/endpoints/: 873 snapshot-uri împotriva hărților de referință (Monroe / Diana / Einstein) + sinastrie / compozit / davison.github/workflows/api-accuracy.yml: rulare automată la PR- Triangulare împotriva swetest CGI + Kerykeion: săptămânal
- Monitorizare upstream Swiss Ephemeris prin Dependabot
Fiabilitatea MCP: ieșire tipizată
Section titled “Fiabilitatea MCP: ieșire tipizată”Precizia motorului este jumătate din încredere. A doua jumătate este contractul de ieșire, pe care un agent (Claude, ChatGPT, Cursor) îl poate valida. Serverul nostru MCP nu returnează “text brut, descurcă-te singur”:
structuredContenttipizat. Peste 600 de instrumente MCP, iar majoritatea covârșitoare dintre ele publică ooutputSchemastrictă - clientul MCP primește o structură validată, nu un șir de caractere pe care trebuie să-l parseze la întâmplare.- Protecție împotriva schema drift. Testul CI
openapi-example-driftvalidează fiecare regression-snapshot împotriva schemei derivate din propriul său exemplu: dacă ieșirea reală a endpoint-ului diferă de schema publicată, build-ul eșuează. Exact această clasă de discrepanțe cauzează eroarea MCP-32602 Output validation error. - Erori: sunt erori. O defecțiune a instrumentului este întotdeauna returnată
cu flag-ul
isErrorși un cod tipizat (UPPER_SNAKE). Noi nu oferim niciodată modelului un stack trace brut sau căi interne ale serverului ca “date”.
Adică, integrarea prin MCP este la fel de previzibilă ca și un apel REST direct:
ceea ce este descris în /openapi.json este ceea ce returnează instrumentul.
Limitări cunoscute
Section titled “Limitări cunoscute”- Date în afara intervalului (înainte de 1800 și după 2399): se utilizează Moshier analytical, precizie ~0.1” (vs. < 0.01” pentru SWIEPH cu fișiere DE431)
- True Lilith (id=13) vs Mean Lilith (id=12): diferență de până la 12° - implicit
Mean Lilith (comportament stabil), True Lilith este disponibil prin
planetIds: [13] - Topocentric vs geocentric: implicit geocentric
Referințe
Section titled “Referințe”- Swiss Ephemeris: https://www.astro.com/swisseph/
- swetest CGI: https://www.astro.com/swisseph/swetest.htm
- Catalogul de eclipse NASA: https://eclipse.gsfc.nasa.gov/
- Kerykeion: https://github.com/g-battaglia/kerykeion
- Astrodienst: https://www.astro.com/
Contacte
Section titled “Contacte”Pentru întrebări legate de precizie: scrie la support@astroway.info cu datele hărții și referința așteptată (astro.com sau altă sursă autoritară).