Я записал портативную замену для time.h (в настоящее время просто localtime (), gmtime (), mktime () и timegm ()), который использует 64 времени передачи бита даже на машинах на 32 бита. Это предназначается, чтобы заскочиться проекты C как замена для time.h. Это используется в Perl, и я намереваюсь зафиксировать Ruby и проблемы Python 2038 с ним также. Это дает Вам безопасный диапазон +/-292 миллиона лет.
можно найти код в y2038 проекте . Не стесняйтесь отправлять любые вопросы система отслеживания ошибок .
относительно "это не будет проблемой в течение еще 29 лет", просматривает этот список стандартных ответов к этому. Короче говоря, материал происходит в будущем, и иногда необходимо знать когда. Я также имею представление проблемы, что не является решением, и что .
, О, и не забывают, что системы многого времени не обрабатывают даты до 1970. Материал произошел до 1970, иногда необходимо знать когда.
Ознакомьтесь с этой статьей (ссылка в формате PDF ) Ричардом Фейтманом. Примеры кода находятся на Лиспе, но в любом случае большая часть секрета сводится к минимизации количества вычислений bignum (целые числа произвольной точности), которые вам необходимо выполнить.
Естественно, если вам не нужны / есть бигнумы, это тривиально; подойдет справочная таблица или простой цикл.
РЕДАКТИРОВАТЬ: Если вы можете использовать приблизительный ответ, вы можете вычислить логарифм факториала напрямую, суммируя log (k)
для k = 2 ... n
, или используя известное приближение Стирлинга . Вы хотите работать с логарифмом везде, где это возможно, чтобы избежать переполнения; в частности, наивное применение приближения Стирлинга приведет к переполнению во многих местах, где этого не должно быть.