Немного предыстории: в октябре 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 году.
Это мог бы быть более исторический вопрос, чем вопрос программирования, который я бы предположил.