Я очень признателен коллегам, внимательно ознакомившимся с моей статьей на арифметическую тему и приславшим свои замечания и дополнения. Не буду настаивать на том, что в реальной жизни замена логической условной конструкции на арифметическое выражение всегда однозначно целесообразна и желательна. Отнюдь нет. Интересна сама такая возможность с точки зрения компактификации и универсализации программного кода. В сверхкритичных по временному фактору программах этот вопрос следует изучать и решать особо.
В программе вычисления следующей даты, приведенной в статье, для переменной y (год) не случайно объявлен интервальный тип year от 1990 до 2000. (В текст статьи, правда, включен рабочий вариант программы, в котором тип year создан, но переменная y объявлена стандартным типом, чтобы не вводить всякий раз полностью четырехзначное число 199*). В этом временном промежутке все формулы будут давать правильный результат в 100% случаев. Если вести речь обо всем периоде христианского летоисчисления, то, действительно, необходимо учитывать некоторые нюансы. Алгоритм, приведенный Вадимом Нарейко, отражает поправку, предложенную Луиджи Лилио в середине XVI столетия. Ее суть заключалась в том, чтобы вернуть на место день весеннего равноденствия, изъяв 10 лишних дней, и не вводить дополнительные дни в конце трех веков, номер которых не кратен четырем, а именно: в 1700, 1800 и 1900 годах. Забавный парадокс состоит в том, что в пределах 2000 минувших лет нашей эры алгоритм, учитывающий поправку Лилио, даст 12 ошибочных результатов, а формула, приведенная в статье, лишь 3. При создании универсальных алгоритмов расчета календарных дат на длительные интервалы времени следует учитывать то обстоятельство, что календарь - вещь не только, а может и не столько арифметическая, сколько историческая. Поправка Лилио была введена лишь в 1582 году. До этого времени на протяжении шестнадцати столетий в западных странах каждый четвертый год был високосным. Для того, чтобы вернуть дату весеннего равноденствия на 21 марта, специально созданной римским папой Григорием XIII комиссией было решено изъять из 1582 года десять дней. Папская булла от 24 февраля 1582 года предписывала во всех христианских странах исключить из указанного года десять дней от 5 до 14 октября включительно. Этот исторический факт также необходимо учесть, создавая универсальную программу для расчета следующей даты на длительный период времени. (Кроме того, есть еще и Россия...) Что касается будущего, то использовать правило Лилио (то есть считать невисокосными "вековые" (кратные 100) года, не кратные четырем, можно будет лишь при условии, что мир и в следующем тысячелетии по-прежнему будет пользоваться григорианским календарем. Последнее обстоятельство, кстати, крайне маловероятно, ведь из-за очевидных неудобств существующей системы разработка альтернативных моделей календарей ведется полным ходом уже сейчас. Вообще затронутая тема крайне интересна и особенно в настоящее время, на рубеже тысячелетий, в том числе в связи с проблемой (или псевдопроблемой?) "2000". А есть еще и проблема определения даты пасхи... О календарь в разное время ломали зубы и головы величайшие умы человечества. Поэтому целиком поддерживаю идею продолжения обсуждения календарных проблем и конкурса "Формула - февраль".
А.КОЛЕСНИКОВ
Горячие темы