Przejdź do głównej zawartości
AstroWay/api v2.158.7 · pl
wszystkie systemy w normie

Precyzja obliczeń

AstroWay API używa Swiss Ephemeris (oficjalny kod C od Astrodienst, twórców astro.com) - tego samego silnika, na którym profesjonalni astrolodzy od ponad 30 lat pracują w Solar Fire ($495), Kepler ($995), Astro Gold ($29.99/mies) i Janus. Zbudowaliśmy go w WebAssembly i udostępniliśmy jako warstwę REST API, bez pośredniej marży. Każdy z podstawowych endpointów obliczeniowych jest pokryty testami regression snapshot; dokładność silnika jest zweryfikowana poprzez triangulację z trzema niezależnymi źródłami + w porównaniu z NASA 5-Millennium Eclipse Catalog:

  • Pozycje planet: mediana 0.0013", maksimum 0.561" vs oficjalnego swetest CGI Astrodienst (zmierzono 2026-07-29 na 130 pomiarach). Rozkład dla ciał poniżej
  • Kuspisy domów Placidus: 0.000" dokładne dopasowanie
  • Zaćmienia: < 1 minuta vs NASA Eclipse Catalog
  • Linie ACG: < 1.5 km na równiku vs swetest
  • Wschód/zachód słońca: < 10 sekund vs timeanddate.com
  • Moon VOC, ingresy, koniunkcje planet: dokładność do ułamka sekundy

Te liczby to nie szacunki, lecz wynik uruchomienia. Skrypt bierze 10 map, rozłożonych od 1900 do 2050 roku, wysyła zapytania o te same momenty do działającego swetest CGI Astrodienst i porównuje wszystkie 13 ciał, które zwracamy. Łącznie 130 pomiarów.

CiałoMaksymalny dryf
Słońce, Wenus, Saturn0.001"
Merkury0.002"
true Node0.004"
Mars0.007"
Jowisz0.009"
Księżyc0.022"
Uran0.083"
Pluton0.097"
Neptun0.223"
Chiron0.561"
mean Apogee (Lilith)0.000"

Mediana dla wszystkich 130 pomiarów: 0.0013".

Wcześniej na tej stronie widniała ogólna obietnica „< 0.1 arcsec”. Pomiary z 2026-07-29 wykazały, że Neptun, Pluton i Chiron jej nie utrzymują, dlatego obietnicę zastąpiono faktycznymi liczbami. Chiron i planety zewnętrzne mają większy dryf, ponieważ ich pozycje są pobierane ze skompresowanego zestawu efemeryd w kompilacji WASM.

Możesz to odtworzyć samodzielnie: api-calc/scripts/accuracy-vs-swetest.mjs wykonuje dokładnie te zapytania i drukuje tę samą tabelę.

Sprawdź sam. Skrypt, którym zmierzono powyższe liczby, znajduje się w publicznym repozytorium na licencji MIT: astroway/astrology-accuracy-benchmark. Działa nie tylko z nami: adapter do dowolnego innego API to trzydzieści linii kodu, więc te same 130 pomiarów można uruchomić przeciwko konkurentowi i porównać. Klucz piaskownicy wystarczy.

KomponentWartość
BibliotekaSwiss Ephemeris C code (aloistr/swisseph)
Wersjaupstream Astrodienst C code
Bindingsswisseph-wasm (WebAssembly w Node.js)
EfemerydyDE431 JPL ephemeris (przez pliki .se1)
FallbackMoshier analytical (dla dat poza 1800-2399)
Code sharingShared @/core z app.astroway.info - jeden silnik, dwa transporty

Dokładność jest sprawdzana poprzez triangulację - porównanie z trzema niezależnymi źródłami:

Oficjalna referencyjna implementacja Swiss Ephemeris od samego Astrodienst - zespołu, który stworzył Astro.com i obsługuje miliony astrologów na całym świecie. Najbardziej autorytatywne publiczne źródło. Nasz silnik jest identyczny (0.00–0.07 sekundy kątowej dryfu).

Niezależna biblioteka Python używająca pyswisseph-bindings zamiast naszego WASM. Potwierdza, że nasza warstwa WASM nie zniekształca danych.

Zdalny Swiss Ephemeris API (syderyczny Lahiri). Systemowy dryf 8–17 sekund kątowych jest związany z różnymi wersjami formuły Lahiri ayanamsa, a nie z dokładnością silnika.

Mapavs swetest (Astrodienst)vs Kerykeion (Python)vs Prokerala API
Monroe 19260.00”0.19”16.95” (systemowy)
Diana 19610.00”0.69”8.18” (systemowy)
Einstein 18790.07”artefakt LMT Kerykeion14.96” (systemowy)

Każdy z podstawowych endpointów obliczeniowych jest pokryty zamrożonymi testami snapshot na 3 referencyjnych mapach (Monroe / Diana / Einstein) = 873 snapshotów.

Zestaw snapshotów wyłapuje:

  • Błędy mapowania danych wejściowych - nieprawidłowe id planety, UT, system domów
  • Post-processing - zaokrąglanie, konwersja jednostek, utrata znaku
  • Rozbieżność domyślnych wartości - mean vs true node, geocentric vs topocentric
  • Schema drift - walidacja przepuściła nieprawidłową formę
  • Przestarzały deploy - prod dist nie odpowiada kodowi

Tolerancja: 5e-5° (≈0.18 sekundy kątowej) domyślnie dla wszystkich pól numerycznych.

MapaDataMaksymalny dryf
Marilyn Monroe1926-06-010.00”
Princess Diana1961-07-010.00”
Albert Einstein1879-03-140.07”
Mapadryf ASCdryf MCMaksymalny dryf kuspisu
Monroe0.000”0.000”0.000”
Diana0.000”0.000”0.000”
WydarzenieMaksimum NASANasze maksimumDryf
2025-03-14 Całkowite Księżycowe06:58 UT06:58 UT0.8 min
2025-03-29 Częściowe Słoneczne10:47 UT10:47 UT0.5 min
2025-09-07 Całkowite Księżycowe18:11 UT18:11 UT0.8 min
2025-09-21 Częściowe Słoneczne19:41 UT19:42 UT1.0 min

Wszystkie linie MC/IC/ASC/DSC używają prawidłowej formuły longitude = RA − GMST (standard Kennetha Bowsera). Dryf od referencji: < 1.5 km na równiku dla wszystkich planet.

LokalizacjaDataParametrDryf
Londyn2026-04-15Wschód Słońca0.6 s
Londyn2026-04-15Zachód Słońca9 s

Lokalizacje polarne (|lat| > 66.5°) automatycznie zwracają polarState + ostrzeżenie, że zwykłe godziny planetarne nie są zdefiniowane.

AstroWay używa zmiennych orbisów per-planet (zasada MIN dwóch planet), jak w ZET9 i astro.com. Domyślne orbisy (dla mapy natalnej):

AspektSłońceKsiężycWewnętrzneJowiszZewnętrzne
Koniunkcja12°10°
Sekstyl6.5°
Kwadrat10°
Trygon12°
Opozycja12°10°

Aspekty minorowe (36°, 40°, 45°, 72°, 108°, 135°, 144°) są domyślnie wyłączone. Włączane są jawnie poprzez ALL_ASPECTS.

Dla |lat| > 66.5° systemy Placidus / Koch / Regiomontanus są matematycznie nie zdefiniowane. W takich przypadkach Swiss Ephemeris automatycznie zwraca Porphyry, a nasze API dodaje ostrzeżenie:

{
"system": "P",
"warning": "Система Placidus не визначена для lat=68.96° (> 66.5°). Swiss Ephemeris підставив Porphyry..."
}

Regresja jest sprawdzana przy każdym PR poprzez CI:

  • api-calc/tests/endpoints/ - 873 snapshotów dla referencyjnych map (Monroe / Diana / Einstein) + synastry / composite / davison
  • .github/workflows/api-accuracy.yml - automatyczne uruchamianie przy PR
  • Triangulacja vs swetest CGI + Kerykeion - co tydzień
  • Monitorowanie upstream Swiss Ephemeris poprzez Dependabot

Dokładność silnika to połowa zaufania. Druga połowa to kontrakt wyjściowy, który agent (Claude, ChatGPT, Cursor) może walidować. Nasz serwer MCP nie zwraca „surowego tekstu, radź sobie sam”:

  • Typowany structuredContent. Ponad 600 narzędzi MCP, a zdecydowana większość z nich publikuje ścisłe outputSchema - klient MCP otrzymuje zweryfikowaną strukturę, a nie ciąg znaków, który trzeba parsować na chybił trafił.
  • Ochrona przed schema drift. Test CI openapi-example-drift waliduje każdy regression-snapshot względem schematu, wygenerowanego z jego własnego przykładu: jeśli rzeczywisty wynik endpointu rozejdzie się z opublikowanym schematem, kompilacja zawodzi. To właśnie ta klasa rozbieżności powoduje błąd MCP -32602 Output validation error.
  • Błędy to błędy. Awaria narzędzia zawsze jest zwracana z flagą isError i typowanym kodem (UPPER_SNAKE). Nigdy nie przekazujemy modelowi surowego stack trace’u ani wewnętrznych ścieżek serwera jako „danych”.

Oznacza to, że integracja poprzez MCP jest tak samo przewidywalna, jak bezpośrednie wywołanie REST: to, co jest opisane w /openapi.json, to właśnie to, co zwraca narzędzie.

  • Daty poza zakresem (przed 1800 i po 2399): używany jest Moshier analytical, dokładność ~0.1” (vs < 0.01” dla SWIEPH z plikami DE431)
  • True Lilith (id=13) vs Mean Lilith (id=12): różnica do 12° - domyślnie Mean Lilith (stabilne zachowanie), True Lilith dostępna poprzez planetIds: [13]
  • Topocentric vs geocentric: domyślnie geocentric

W sprawie pytań dotyczących dokładności: napisz na support@astroway.info z danymi mapy i oczekiwaną referencją (astro.com lub inne autorytatywne źródło).

Przydatne?
Запропонувати правку

Ostatnia aktualizacja: