Алгоритмы FAST для вычислений факториала

Я записал портативную замену для time.h (в настоящее время просто localtime (), gmtime (), mktime () и timegm ()), который использует 64 времени передачи бита даже на машинах на 32 бита. Это предназначается, чтобы заскочиться проекты C как замена для time.h. Это используется в Perl, и я намереваюсь зафиксировать Ruby и проблемы Python 2038 с ним также. Это дает Вам безопасный диапазон +/-292 миллиона лет.

можно найти код в y2038 проекте . Не стесняйтесь отправлять любые вопросы система отслеживания ошибок .

относительно "это не будет проблемой в течение еще 29 лет", просматривает этот список стандартных ответов к этому. Короче говоря, материал происходит в будущем, и иногда необходимо знать когда. Я также имею представление проблемы, что не является решением, и что .

, О, и не забывают, что системы многого времени не обрабатывают даты до 1970. Материал произошел до 1970, иногда необходимо знать когда.

23
задан ThisSuitIsBlackNot 18 November 2009 в 01:02
поделиться

1 ответ

Ознакомьтесь с этой статьей (ссылка в формате PDF ) Ричардом Фейтманом. Примеры кода находятся на Лиспе, но в любом случае большая часть секрета сводится к минимизации количества вычислений bignum (целые числа произвольной точности), которые вам необходимо выполнить.

Естественно, если вам не нужны / есть бигнумы, это тривиально; подойдет справочная таблица или простой цикл.

РЕДАКТИРОВАТЬ: Если вы можете использовать приблизительный ответ, вы можете вычислить логарифм факториала напрямую, суммируя log (k) для k = 2 ... n , или используя известное приближение Стирлинга . Вы хотите работать с логарифмом везде, где это возможно, чтобы избежать переполнения; в частности, наивное применение приближения Стирлинга приведет к переполнению во многих местах, где этого не должно быть.

Вы хотите работать с логарифмом везде, где это возможно, чтобы избежать переполнения; в частности, наивное применение приближения Стирлинга приведет к переполнению во многих местах, где этого не должно быть.

Вы хотите работать с логарифмом везде, где это возможно, чтобы избежать переполнения; в частности, наивное применение приближения Стирлинга приведет к переполнению во многих местах, где этого не должно быть.

9
ответ дан 29 November 2019 в 03:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: