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



         

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


Пусть григорианская дата представлена в виде двух целых чисел у (номер года, который может быть как положительным, так и отрицательным для дат до но-

вой эры), м (номер месяца — число от 1 до 12) и вещественного числа от = D.T (D — номер дня в месяце, т — часть текущего дня от 0,00000 до 0,99999, прошедшая от полуночи). Единственная тонкость в формулах Меёса заключается в том, что используемая им функция int означает выделение целой части без какого-либо округления в большую или меньшую сторону.

Если м > 2, то положим y = Y и m = M, в противном случае у = Y - 1 и m = м + 12. Если григорианская дата приходится на момент после 15.10.1582, то вычисляются:

А = int(у/100)

В = 2 - А + int(А/4)

Если заданная дата предшествует моменту принятия григорианского календаря, то следует положить в = о. Для правильной обработки отрицательных номеров года следует вычислить:

С = int(365.25*у) при у > 0

С = int(365.25 * у - 0.75) При у < 0

Окончательная формула для нахождения JD имеет вид:

JD = С + int (30. 6001 * (m+D) + DT + 1720994.5 + В

Численные эксперименты показали, что функция JD2 выдает правильные результаты на всем интервале дат, начиная с 1.01.4713 до н. э. (то есть от Y = -4712, м = 1, от = 1.5) и до наших дней. Ее работа была проверена нами в цикле для 12 часов полудня каждого дня начального года. А затем — также в цикле по первому дню каждого последующего года с учетом смены обычных и високосных лет.

Алгоритм JD3

Алгоритм JD3, указанный в предисловии редактором перевода книги Меёса, привлекает своей простотой. В нем нет никаких логических проверок и реализующая его функция на языке Си имеет вид:

double JD3(int Y,int M,double DT) {

return 367.0*Y-floor(7.0*(Y+floor((M+9.)/12.))/4.)+

floor(275.0*M/9.)+DT+1721013.5; }

Однако первый же эксперимент с вычислением даты JD, приходящейся на 101,1600 (JD3 = 2305445.0), привел к расхождению с результатом Меёса (JD2 = = 2305448.0) на 3 дня. Более тщательный эксперимент показал, что функция JD3 начинает выдавать правильные результаты с 1.03.1900. А заключительной датой, до которой значения JD3 совпадают с JD2, является 29.02.2100.




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