![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
FactorialBoost , Math Toolkit 2.5.0 , Factorials and Binomial Coefficients
|
![]() |
Important |
---|---|
Функции, описанные ниже, являются шаблонами, где аргумент шаблона T не может быть выведен из аргументов, переданных функции. Если вы пишете что-то вроде:
Вы получите (возможно, озадачивающую) ошибку компилятора, которая обычно указывает на отсутствие такой функции. Вместо этого вам нужно указать тип возврата и написать:
Так что тип возврата известен. Кроме того, аргумент шаблона должен быть действительно ценным типом, таким как Исходный код BOOST_STATIC_ASSERT(!boost::is_integral<T>::value); // factorial<unsigned int>(n) is not implemented // because it would overflow integral type T for too small n // to be useful. Use instead a floating-point type, // and convert to an unsigned type if essential, for example: // unsigned int nfac = static_cast<unsigned int>(factorial<double>(n)); // See factorial documentation for more detail. |
template <class T> T factorial(unsigned i); template <class T, class Policy> T factorial(unsigned i, const Policy&);
Возвращаетсяи
.
Конечный аргументПолитикаявляется необязательным и может быть использован для контроля поведения функции: как она обрабатывает ошибки, какой уровень точности использовать и т. д. См. документациюдля более подробной информации.
Дляi<=max_factorial< T>:: значение
реализуется путем поиска таблицы, для более крупных значенийi
эта функция реализуется в терминахtgamma.
Еслиi
настолько велик, что результат не может быть представлен в типе T, то вызываетoverflow_error.
template <class T> T unchecked_factorial(unsigned i);
Возвращаетсяи
.
Внутренне эта функция выполняет поиск по таблице результата. Далее он не выполняет проверку диапазона по значению i: абонент должен убедиться, чтоi<= max_factorial
. Эта функция предназначена для использования во внутренних петлях, которые требуют быстрого поиска факториалов в таблице, но требуют осторожности, чтобы аргументi
никогда не становился слишком большим.
template <class T> struct max_factorial { static const unsigned value = X; };
Этот класс признаков определяет наибольшее значение, которое может быть переданоunchecked_factorial
. Значениеможно использовать там, где требуются интегральные постоянные выражения: например, для определения размера дополнительных таблиц, зависящих от факториалов.
Для аргументов меньшеmax_factorial<T>::значение
результат должен быть правильно округлен. Для более крупных аргументов точность будет такой же, как дляtgamma.
Основные проверки здравомыслия и значения пятен для проверки таблиц данных: основные тесты для функцииtgammaуже обрабатывают эти случаи.
Факторная функция приводится в таблицу для небольших аргументов и реализуется в терминахtgammaдля более крупных аргументов.
Статья Factorial раздела Math Toolkit 2.5.0 Factorials and Binomial Coefficients может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Factorials and Binomial Coefficients ::
реклама |