Практика программирования (Бейсик, Си, Паскаль)



         

Вычисление юлианских дат


Существует довольно много алгоритмов преобразования григорианских дат в юлианские, не использующих таблицы. Мы остановимся на трех из них. Алгоритм JDI впервые был опубликован на алгоритмическом языке АЛГОЛ-60 в журнале американской ассоциации вычислительных машин (Fliegel H. F., Van Flandern Т. С. A Machine Algorithm for Processing Calender Dates (algorithm 657). Communications of the ACM, 1968). Позднее он был переведен на ФОРТРАН (Spaeth H. Ausgewaehlte Operations Research-Algorithmen in FORTRAN. Wien, 1975) и послужил прообразом нашей функции JDI. Неформальное описание алгоритма JD2, ориентированное на использование ручных калькуляторов, приводится в книге Ж. Меёса "Астрономические формулы для калькуляторов" (М.: Мир, 1988). Наконец, алгоритм аоз описан в предисловии редактора перевода книги Меёса. Основным недостатком указанных публикаций является отсутствие информации о допустимом временном интервале, на котором тот или иной алгоритм работает правильно. Для определения таких интервалов нам пришлось провести довольно громоздкий вычислительный эксперимент.

Алгоритм JD1

Функция JDI предназначена для вычисления юлианской даты по году (Y), номеру месяца (м) и номеру дня месяца (о) на 12 часов полудня. Вместо неформального описания алгоритма JDI ниже приводится текст соответствующей функции JDI.C, содержащей всего три строки. При переводе фортрановской программы потребовалась аккуратность с явным заданием типа промежуточных данных и некоторых констант.

long JDI(int Y,int M,int D) {

long q,j;

j=(M-14)/12;

q=Y+j+4800;

return D-32075L+1461*q/4+367L*(M-2-12*j)/12-3*((q+100)/100) /4; }

Численный эксперимент показал, что формулы алгоритма JDI справедливы только для дат позднее 15.10.1582. В соответствующих оригинальных публикациях это ограничение не приводится. Возможно, что на практике большинству из нас и не придется обрабатывать более ранние даты, однако оговорка о сфере применимости алгоритма представляется нам обязательной.

Алгоритм JD2




Содержание  Назад  Вперед