Alois님께,

같은 시각을 두 가지 방법으로 입력했는데, swetest -astpos에서 서로 다른 결과가 나옵니다.

swetest -b1.1.2020 -ut12:00 -astpos288.115686,0.01 헤더: UT: 2458850.000000000 delta t: 69.361280 sec TT: 2458850.000802793 "Asteroids near 288.115686 within orb 0.010 ... " : 아무것도 표시되지 않음

swetest -bj2458850.000802793 -astpos288.115686,0.01 헤더에 같은 UT 및 TT 행이 표시됨 목록에 표시됨: 0.010 1 Ceres

-utc12:00도 -ut12:00과 동일하게 작동합니다. 2020-01-01 12:00 UT의 세레스 위치는 288.10578618(속도 0.3994/일)입니다. 헤더에는 올바른 UT와 TT가 표시되지만, 위치는 69.36초 이른 시점으로 계산됩니다. 그 결과 세레스는 0.000321도 뒤처져 위에서 사용한 0.010 오브 밖에 놓입니다. 저장소의 seas_18.se1과 seasnam.txt를 사용해, 커밋 94621aba의 swetest.c를 MSVC로 빌드하여 측정했습니다.

원인은 다음과 같습니다. -astpos를 추가한 커밋 3fd0f956이 반영된 94621aba에서의 코드입니다.

swetest.c:1613 print_asteroids(tjd, astpos, orb);

print_asteroids는 해당 값을 swe_calc에 전달하는데, swe_calc는 TT를 기대합니다. -utc에서는 tjd에 UT가 들어가고(:1466, tjd = tret[1] from swe_utc_to_jd), -ut에서는 UT로 읽은 날짜 자체가 들어갑니다(:1468). main()은 TT를 te = t + delt로 별도로 계산하고(:1554), 다른 모든 작업에는 te를 사용합니다. 예를 들어 :1618의 swe_get_ayanamsa_ex(te, ...)가 그렇습니다. -ut/-utc를 사용하지 않으면 tjd는 이미 TT이므로 해당 목록은 올바릅니다.

수정은 토큰 하나입니다.

- print_asteroids(tjd, astpos, orb); + print_asteroids(te, astpos, orb);

이 수정 사항을 적용하면 -ut12:00, -utc12:00 및 TT 형식 모두에서 세레스가 목록에 표시됩니다. swetest-astpos-ut-time.patch를 첨부했습니다(git apply로 적용, 94621aba 기준).

안부를 전하며, Timothy van der Ham