Почему сумма календарных дней с 1. н.э. по 1.1.2001 отличается от тропических дней на 3? - PullRequest
0 голосов
/ 04 ноября 2019

Немного предыстории: в октябре 1582 года был введен григорианский календарь , чтобы исправить проблемы с юлианским календарем, который использовался до этого. Григорианский календарь более точно определяет продолжительность года, добавляет новый расчет високосного года и удаляет 10 дней из юлианского календаря при переходе (перемещение с 4.Oct.1582 до 15.Oct.1582)

 // Julian leap year calculation
 ((year % 4) == 0)

 // Gregorian leap year calculation
 ((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0) 

Чтобы подвести итоги всех календарных дней с 1 по 2001 год нашей эры, я использую:

#include <stdio.h>

int  main( void)
{
   int   year;
   int   daysInYear;
   int   total;

   total = 0;
   for( year = 1; year <= 2001; year++)
   {
     //
      daysInYear = 365;
      if( year < 1582)
         daysInYear += ((year % 4) == 0);
      else
         if( year > 1582)
            daysInYear += ((year % 4) == 0 && (year % 100) != 0) || ((year % 400) == 0);
         else
            daysInYear -= 10;  // 1582 exactly
      total += daysInYear;

      printf( "%d: +%d = %d\n", year, daysInYear, total);
   }
   return( 0);
}

Теперь, выполняя это исчерпывающе в течение всех лет с 1 по 2000, получаем эту пастинку: https://pastebin.com/bR7hwNr1

Самые интересные биты показывают, что расчет високосного года и пропуска дня верен и также дает результат:

1: +365 = 365
2: +365 = 730
3: +365 = 1095
4: +366 = 1461
...
100: +366 = 36525  
...
400: +366 = 146100
...
1581: +365 = 577460  
1582: +355 = 577815
1583: +365 = 578180
...
1900: +365 = 693962
...
1996: +366 = 729026
1997: +365 = 729391
1998: +365 = 729756
1999: +365 = 730121
2000: +366 = 730487

Теперь вопрос такой: 1.1.2001 - 730487 прошедших календарных дней. Учитывая продолжительность года, определенную по григорианскому календарю как 365,2425, я бы ожидал увидеть 2000 * 365,2425 = 730485 дней. Если использовать тропические дни или солнечные дни, это будет 730484. Но 740487 явно находится вне диапазона.

Если предположить, что никто не пропустил ни одного дня в диапазоне григорианского календаря, в юлианском календаре есть несколько дополнительных дней, которые не совпадают с тропическими днями. Но григорианский был создан для исправления юлианского календаря, и я не думаю, что они допустили бы такую ​​большую ошибку в 1582 году.

Это мог бы быть более исторический вопрос, чем вопрос программирования, который я бы предположил.

1 Ответ

2 голосов
/ 05 ноября 2019

Целью григорианской реформы календаря было перенести дату весеннего равноденствия в северном полушарии на 21 марта и сохранить ее там. Эта дата была выбрана потому, что это была приблизительная средняя дата равноденствия во время Никейского собора в 325 году нашей эры. Во время совета дата равноденствия сместилась примерно с 25 марта в нашей эры 1.

Для получения более подробной информации прочитайте книгу Григорианская реформа календаря , которая представляет собой труд конференции, проведенной Ватиканской обсерваторией и опубликованной в 1983 году.

Чтобы уточнить при оценкев григорианском календаре по сравнению с юлианским, использование сочетания юлианских и григорианских дат включает единовременную коррекцию в 10 дней, которая была предназначена для исправления накопленных избыточных високосных лет с примерно 325 г. н.э. до 1582 г. н.э. дата, отличная от 325 г. н.э., весь расчет должен использовать ТОЛЬКО григорианские даты или ТОЛЬКО юлианские даты.

...