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-am compilat în WebAssembly și l-am expus ca un strat API REST, fără marjă de intermediere. 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 NASA 5-Millennium Eclipse Catalog:
- Poziții planetare: mediana
0.0013", maxim0.561"vs swetest CGI oficial Astrodienst (măsurat pe 29.07.2026, pe 130 de măsurători). Defalcare pe corpuri mai jos - Cuspidele caselor Placidus:
0.000"potrivire exactă - Eclipse:
< 1 minutvs NASA Eclipse Catalog - Linii ACG:
< 1.5 kmla ecuator vs swetest - Răsărit/Apus de Soare:
< 10 secundevs timeanddate.com - Moon VOC, ingrese, conjuncții planetare: precizie până la o fracțiune de secundă
Metodologie: cum a fost măsurat exact
Section titled “Metodologie: cum a fost măsurat exact”Aceste numere nu sunt o estimare, ci rezultatul unei rulări. Scriptul ia 10 hărți, distribuite între anii 1900 și 2050, solicită aceleași momente de la un swetest CGI Astrodienst live și compară toate cele 13 corpuri pe care le returnăm. În total 130 de măsurători.
| Corp | Derivă maximă |
|---|---|
| Soare, Venus, Saturn | 0.001" |
| Mercur | 0.002" |
| true Node | 0.004" |
| Marte | 0.007" |
| Jupiter | 0.009" |
| Lună | 0.022" |
| Uranus | 0.083" |
| Pluto | 0.097" |
| Neptun | 0.223" |
| Chiron | 0.561" |
| mean Apogee (Lilith) | 0.000" |
Mediana pentru toate cele 130 de măsurători: 0.0013".
Anterior, pe această pagină, exista o promisiune generală de «< 0.1 arcsec». Măsurătorile din 29.07.2026 au arătat că Neptun, Pluto și Chiron nu o respectă, de aceea promisiunea a fost înlocuită cu cifrele reale. Chiron și planetele exterioare au o derivă mai mare deoarece pozițiile lor sunt preluate dintr-un set comprimat de efemeride în compilarea WASM.
Poți reproduce singur: api-calc/scripts/accuracy-vs-swetest.mjs efectuează
exact aceste solicitări și tipărește același tabel.
Verifică singur. Scriptul cu care au fost măsurate cifrele de mai sus se află într-un depozit public sub licența 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. Cheia de sandbox este suficientă.
| Componentă | Valoare |
|---|---|
| Bibliotecă | Swiss Ephemeris C code (aloistr/swisseph) |
| Versiune | cod C upstream Astrodienst |
| Binding-uri | swisseph-wasm (WebAssembly în Node.js) |
| Efemeride | DE431 JPL ephemeris (prin fișiere .se1) |
| Fallback | 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 derivă).
2. Kerykeion (Python)
Section titled “2. Kerykeion (Python)”O bibliotecă Python independentă utilizează binding-uri pyswisseph în locul WASM-ului nostru.
Confirmă că stratul nostru WASM nu denaturează datele.
3. Prokerala API
Section titled “3. Prokerala API”API Swiss Ephemeris la distanță (Lahiri sideral). Deriva 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) |
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 (tropic, vs swetest)
Section titled “Poziții planetare (tropic, vs swetest)”| Hartă | Dată | Derivă 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ă | derivă ASC | derivă MC | Derivă maximă cuspide |
|---|---|---|---|
| Monroe | 0.000” | 0.000” | 0.000” |
| Diana | 0.000” | 0.000” | 0.000” |
Eclipse (vs NASA 5-Millennium Catalog)
Section titled “Eclipse (vs NASA 5-Millennium Catalog)”| Eveniment | Maxim NASA | Maximul nostru | Derivă |
|---|---|---|---|
| 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)”Toate liniile MC/IC/ASC/DSC utilizează formula corectă longitude = RA − GMST
(standard Kenneth Bowser). Derivă față de referință: < 1.5 km la ecuator pentru
toate planetele.
Răsărit / Apus de Soare (vs timeanddate.com)
Section titled “Răsărit / Apus de Soare (vs timeanddate.com)”| Locație | Dată | Parametru | Derivă |
|---|---|---|---|
| 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), la fel ca în ZET9 și astro.com. Orbe implicite (pentru harta natală):
| Aspect | Sun | Moon | 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 не визначена для lat=68.96° (> 66.5°). Swiss Ephemeris підставив 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) + synastry / composite / davison.github/workflows/api-accuracy.yml- rulare automată la PR- Triangulare împotriva swetest CGI + Kerykeion - săptămânal
- Monitorizarea upstream Swiss Ephemeris prin Dependabot
Fiabilitatea MCP - ieșire tipizată
Section titled “Fiabilitatea MCP - ieșire tipizată”Precizia motorului este jumătate din încredere. Cealaltă 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 snapshot de regresie împotriva schemei derivate din propriul său exemplu: dacă ieșirea reală a endpoint-ului diferă de schema publicată, compilarea eșuează. Exact această clasă de divergențe cauzează eroarea MCP-32602 Output validation error. - Erorile sunt erori. Eșecul instrumentului este întotdeauna returnat cu un flag
isErrorși un cod tipizat (UPPER_SNAKE). Noi nu returnăm 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 Eclipselor 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 etalonul așteptat (astro.com sau altă sursă autoritară).