Київський клуб аматорів астрономії "Астрополіс"

astromagazin.net
* *
Ласкаво просимо, Гість. Будь ласка, увійдіть або зареєструйтеся.
05 Лютого 2026, 20:28:24

Увійти

google


Автор Тема: Астрономічна бібліотека на С++23  (Прочитано 192 раз)

0 Користувачів і 1 Гість дивляться цю тему.

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Астрономічна бібліотека на С++23
« : 02 Лютого 2026, 17:21:36 »
. - .

Всім привіт!
Давно я тут не був...

Отже, на днях розпочав мій "пет проект" у програмуванні, котрий для душі і для загальної астрономічної користі.
Я про астрономічну бібліотеки, котрі програмісти підключають до свого софту.

Наразі у світі існують різні астрономічні бібліотеки під різними ліцензіями і різних рівнів точності обчислень, написані на FORTRAN, C, C++...

Я пишу бібліотеку на C++23 в IDE CLion. У ролі компілятора, використовую Ubuntu clang version 20.1.8

Кожен модуль/функція має свій бінарник для тесувань, бо треба не 3-5 тестів, а 30-50 мінімум.

Очевидно, що точність обчислень залежить від застосованих формул і т.п.
Код треба "крутити на всі боки", щоб знаходити його слабкі місця...

Що на це скажете?...
Записаний

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Re: Астрономічна бібліотека на С++23
« Відповідь #1 : 02 Лютого 2026, 17:28:22 »
. - .

=== Базові стандарти / високоточна астрометрія
***  SOFA (IAU Standards of Fundamental Astronomy)

офіційна від IAU

золотий стандарт

час (UTC/TAI/TT/TDB), прецесія, нутація, трансформації систем координат

C + Fortran

- Якщо потрібна максимальна наукова коректність — це база.

*
Скрытый текст
**  ERFA (Essential Routines for Fundamental Astronomy)

форк SOFA з більш вільною ліцензією (BSD)

API майже 1:1 як SOFA

використовується в Astropy

- Фактично SOFA без ліцензійних обмежень.

=== Ефемериди / рух тіл Сонячної системи
***  SPICE Toolkit (NASA NAIF)

дуже потужний

орбіти, позиції, орієнтації КА, планет, місій

працює через SPK/CK/PCK kernels

C / Fortran / Python (SpiceyPy) / MATLAB / IDL

Можна:

де була Cassini у 2005?

куди дивився телескоп?

точні вектори стану тіл

- де-факто стандарт для космічних місій

***  JPL DE Ephemerides (через бібліотеки типу jplephem)

DE430/440/441

дуже точні координати планет/Місяця

Python: jplephem, skyfield

- коли треба максимальна точність положень планет

===  Python-екосистема (зручно для розробки)
***  Astropy

величезний комбайн

координати, час, ефемериди, FITS, фотометрія

всередині використовує ERFA + JPL

Має:

astropy.coordinates

astropy.time

astropy.units

- якщо хочеш швидко і красиво робити астрономію в коді

***  Skyfield

сучасні ефемериди на Python

простіший ніж SPICE

читає JPL kernels

дуже зручний API

- ідеальний для:

позицій планет

сходу/заходу

орбіт супутників (TLE)

***  poliastro

орбітальна механіка

маневри, трансфери Гомана, propagation

базується на Astropy

- для астродинаміки/орбітальних задач

=== C/C++ / низькорівневі
***  libnova

легка C-бібліотека

координати, час, ефемериди

проста і швидка

- для embedded/невеликих проєктів

***  NOVAS (US Naval Observatory)

ще один «офіційний» пакет

схожий за рівнем із SOFA

точні астрометричні розрахунки

C/Fortran

- альтернатива SOFA з боку USNO
Записаний
Подякували

ds40a

  • Offline Offline
  • Повідомлень: 2202
  • Подяк: 459
  • Дмитро Сорока. Слава Україні !
Re: Астрономічна бібліотека на С++23
« Відповідь #2 : 02 Лютого 2026, 19:39:47 »
. - .

...
Що на це скажете?...

Круто!

Самі займаєтеся чи помічники є?
Записаний

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Re: Астрономічна бібліотека на С++23
« Відповідь #3 : 02 Лютого 2026, 20:23:07 »
. - .

Копаю разом з ШІ чатами, щоб докладно виясняти різні тонкощі.
Записаний

ds40a

  • Offline Offline
  • Повідомлень: 2202
  • Подяк: 459
  • Дмитро Сорока. Слава Україні !
Re: Астрономічна бібліотека на С++23
« Відповідь #4 : 02 Лютого 2026, 20:38:46 »
. - .

А що спонукало почати цю роботу?
Записаний

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Re: Астрономічна бібліотека на С++23
« Відповідь #5 : 02 Лютого 2026, 20:40:47 »
. - .

Однозначно, що моє бажання ще глибше у цьому розібратись і реалізувати у готовому продукті
.
Записаний

tlgleonid

  • Moderator
  • Offline Offline
  • Повідомлень: 7310
  • Подяк: 897
Re: Астрономічна бібліотека на С++23
« Відповідь #6 : Вчора в 14:16:53 »
. - .

Моделі JPL (DE440) є фактично інтегруванням по траекторіям з розрахунком реперних точок і апроксимацією між ними. Тобто модель вже є розробленою і для кінцевого розробника там залишилась лише гола математика без жодної фізики. Я так розумію, що планується створити оболонку під модель?
І я чомусь думав, що людина, яка живе в ЄС обере трохи інший підхід моделі INPOP. Чому саме JPL?
Записаний
Задокументировано наблюдение  >1500 Deepsky объектов.
ТАЛ75R, GSO 8" 1:4 +HEQ5Pro SynScan+ZWO ASI183MM+ZWO ASI178MM+PlayerOne Uranus C+фильтры R,V, 265мм и 415 мм Добсоны HandMade+o3+hb+uhc+...
FAQ по любительской астрономии

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Re: Астрономічна бібліотека на С++23
« Відповідь #7 : Вчора в 20:48:03 »
. - .

Ні, то не про оболонку для моделі, а про астрономічну бібліотеку, як набір функцій для різних астрономічних обчислень, котрі можна використовувати в іншому астрософті.

Наприклад, є бібліотека ERFA (Essential Routines for Fundamental Astronomy) - компактна open source C бібліотека з еталонними алгоритмами фундаментальної астрономії.

Щось подібне і я пишу, але замість типу double використовую переваги real128, що дає точність розрахунків до 1e-34.
« Останнє редагування: Вчора в 21:00:10 від Oleg Astro »
Записаний

ds40a

  • Offline Offline
  • Повідомлень: 2202
  • Подяк: 459
  • Дмитро Сорока. Слава Україні !
Re: Астрономічна бібліотека на С++23
« Відповідь #8 : Вчора в 21:48:06 »
. - .

AI каже, що real128 не має апаратної підтримки у процесорів, тому емулюється через це щвидкість обчислень знижується. По друге real128 має 33-36 зачущих ціфр. Чи достатньо це для астрономічних розрахунків? Ви писали, що радилися з AI при прийняті рішень. Які критерії до бібліотеки ви використовували?

p.s.  Це відповідь gemini на запитання
C++ бібліотека для астрономічних обчислень (ефемериди, інтегрування орбіт, сонячні системи) все таки що порадите використовувати?

Для професійних астрономічних обчислень у C++ вибір залежить від того, чи вам потрібні готові дані про положення планет (ефемериди), чи ви хочете самі інтегрувати рівняння руху (симуляція).
Ось найкращі варіанти:
1. NASA SPICE Toolkit (найпотужніша)
Це "золотий стандарт" в аерокосмічній галузі. Якщо вам потрібно знати, де буде Марс відносно Землі 12 квітня 2029 року з урахуванням усіх релятивістських ефектів — це ваш вибір.
Функції: Читання ефемеридних файлів (SPK), перетворення координат (J2000, галактичні тощо), розрахунок часу (TDB, UTC).
Посилання: NAIF SPICE Toolkit.
Версія: Для C++ використовуйте бібліотеку CSPICE.
2. REBOUND (найкраща для інтегрування)
Якщо ваша задача — кинути астероїд у Сонячну систему і подивитися, що з ним станеться через 1000 років.
Функції: Надшвидке та прецизійне інтегрування задачі N-тіл. Підтримує різні методи (IAS15 — адаптивний крок, дуже висока точність).
Перевага: Дуже стабільна при симуляції хаотичних орбіт.
Посилання: REBOUND на GitHub.
3. Boost.Numeric.Odeint + Boost.Multiprecision
Якщо ви пишете власну математичну модель з нуля і вам потрібна точність > 50 знаків.
Функції: Це конструктор. Ви берете Odeint для вирішення диференціальних рівнянь і підставляєте туди типи з Multiprecision.
Перевага: Дозволяє проводити інтегрування з будь-якою кількістю знаків після коми.
Посилання: Boost.Odeint Guide.
4. SOFA (Standards Of Fundamental Astronomy)
Бібліотека від Міжнародного астрономічного союзу (IAU).
Функції: Найточніші алгоритми для прецесії, нутації та перетворення часу.
Для кого: Для тих, кому потрібна фундаментальна точність в алгоритмах, затверджена міжнародною спільнотою.
Посилання: IAU SOFA Library.
Підсумок: що обрати?
Потрібні готові координати планет NASA? — SPICE.
Потрібна швидка симуляція багатьох тіл? — REBOUND.
Потрібна екстремальна точність (50+ знаків) для власної формули? — Boost.
Потрібні фундаментальні алгоритми (зірки, календар)? — SOFA.
« Останнє редагування: Вчора в 21:59:04 від ds40a »
Записаний
Подякували

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Re: Астрономічна бібліотека на С++23
« Відповідь #9 : Сьогодні в 00:10:22 »
. - .

То ж такий мій "пет-проект"  :gigi:

Ну так. Я ж використовую комп'ютер із залізом  на 64-біти.
Записаний

Саша Наумов

  • Клуб Астрополіс
  • Offline Offline
  • Повідомлень: 1500
  • Подяк: 653
  • Refractorman
Re: Астрономічна бібліотека на С++23
« Відповідь #10 : Сьогодні в 14:09:29 »
. - .

Хочу додати свої 5 шагів, як професійний С/С++ розробник.

Писати таку бібліотеку в якості pet project - непогана ідея.
Згадати сферичну тригонометрію, аналітичну геометрію в 3D, розібратись з системами часу і т.і.
Це все цікаво, я грався з такими штуками. Використовував VSOP і ELP від Паризького Бюро довгот, транслював з фортрану на С; хотів ще JPL DE405 додати і почав, але не закінчив.
Та банально розрахувати обставини прольоту заданого супутника в заданому місці і часі - то вже нетривіальна задача. Я коли спробував, швидко зрозумів що треба писати свій код.

Але. Існує маса факторів, чому така уявна бібліотека так і залишиться пет проектом.
Наприклад. От Ви кажете, real128 замість double. А чи знаєте Ви розподіл похибки обчислення синуса від аргумента real128 ? Як він співставляється з вказаними 1e-34? Я маю на увазі, що неточна або приблизна функція синуса зведе нанівець усі зусилля.
Також, не знаю, які фішки саме С++'23 використовуються і де там C++. Оператори перевантажувати?
Якщо треба 128-бітний floating point - то він підтриманий gcc і в С і в С++, тут 23 стандарта взагалі не потрібно!
Записаний
Agema SD 150 + WS-400 + Apogee Alta F16M
Подякували

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Re: Астрономічна бібліотека на С++23
« Відповідь #11 : Сьогодні в 15:33:40 »
. - .

Всім дякую за відповіді, бо вони мені допомагають формувати як загальну картину, так і тонкощі, котрі дуже різні.

Чому саме ця бібліотека, а не щось там інше?
Бо я вже доволі давно думав над "пет проектом", над котрим мені було б цікаво сидіти.
Звісно, що я читав різні приклади та пропозиції щодо подібних проектів, але вони " душу мені не гріли" :(

А проект подібної бібліотеки - це мене дуже вже затягує, бо астрономічними обчисленнями займався ще від шкільних років, забуваючи про їжу та сон.
Тому є велика ймовірність, що цей проект я буду розвивати...

Щодо точності обчислень - то її мало, як такої.
Бо типи даних float, double, real128 - це межа представлення числа, але не про власне точність реалізації функцій.

Інакше кажучи, real128 дає гарантію зберігання числа π = 3.141592653589793238462643383279502884Q, проте нічого нам не каже, наскільки реально точним до 1e-34 будуть власне обчислені значення типу там sin(π/12), exp(x), atan(x) та інші функції, бо це вже про поліноми.
Записаний

Oleg Astro

  • Offline Offline
  • Повідомлень: 52
  • Подяк: 93
Re: Астрономічна бібліотека на С++23
« Відповідь #12 : Сьогодні в 19:05:20 »
. - .

Моє дослідження ось які результати показало для sin(Pi/7):

0.4338837391175581204757683328483587 546099 907..020    // еталон
0.4338837391175581204757683328483587 546099 907...021   // BOOST
0.4338837391175581204757683328483587 546100                   // MPFR
0.4338837391175581204757683328483587 317387                   // 29 ступінь поліном
0.4338837391175581204757683328483587 317387                   // 27 ступінь поліном
0.4338837391175581204757683328483587 317387                   // 25 ступінь поліном
0.4338837391175581204757683328483587 317387                   // #include <quadmath.h>
0.4338837391175581204757683328483585 872939                   // 23 ступінь поліном

З оглядом на інші сторони, є смисл використовувати MPFR.
Записаний