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



         

Немного истории - часть 3


Хранение даты и времени в формате юлианского дня представляется достаточно экономичным. Потребуется всего 8 байт для величины типа double, тогда как для запоминания символьной строки вида "YYYY/MM/DD HH:MM:SS" необходимо не менее 20 байт. Если нужно хранить только целую часть JD (тип long), то можно ограничиться 4 байтами. Конечно, для запоминания даты и времени в числовом машинном формате можно обойтись и 7 байтами (2 байта под год и по 1 байту под остальные компоненты). В некоторых системных программах MS-DOS попытки упаковать дату привели к еще более сжатым форматам. Вместо года Y хранится двоичное число, равное Y-1980 и принадлежащее интервалу [0,119], на номер месяца отведено 4 бита, а на все остальные компоненты — по 5 бит. Это позволило втиснуть дату и время в 32 двоичных разряда. Однако вместо полного номера года так можно представить только его младшие цифры, а вместо полного числа секунд — количество полусекунд. Для хранения дат создания файлов такой способ вполне пригоден, но для программ обработки календарных дат из более широкого временного интервала явно не годится.

Непрерывный таймер Дж. Скалигера удобен еще и тем, что позволяет очень просто вычислять различные временные интервалы как с точностью до суток, прошедших между двумя календарными датами, так и с точностью до секунд и даже долей секунды. В дальнейшем мы покажем, что по JD вычислить день недели можно всего за две операции.

Сложность заключается только в одном — надо перевести дату и время дня в показания юлианского хронометра. Первые алгоритмы такого перевода, которыми пользовались астрономы, базировались на таблицах юлианских дат, приходящихся на начало года. Дальше оставалось подсчитать порядковый день в году, соответствующий преобразуемой дате, и выполнить сложение. Однако для компьютерных программ табличный алгоритм неудобен, т. к. он связан с хранением довольно больших массивов, которые ежегодно приходилось пополнять.




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