![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
ReferenceBoost , Math Toolkit 2.5.0 , Facets for Floating-Point Infinities and NaNs
|
число |
Струна |
---|---|
Положительная бесконечность |
Инф |
Положительная нан |
Нэн |
Отрицательная бесконечность |
-инф |
Отрицательное НАН |
-нан |
Эти числа могут быть типа<float
>,<double
>и<long
double
>. Струны могут быть во всех нижних или во всех верхних случаях. Дополнительный знак + может использоваться с положительными числами. Это можно контролировать с помощью<uppercase
>,<lowercase
>,<showpos
>и<noshowpos
>манипуляторов. Форматирование целых чисел, булевых значений и конечных чисел с плавающей точкой просто делегировано нормальному<std::num_put
>.
nonfinite_num_get
template<class CharType, class InputIterator = std::istreambuf_iterator<CharType> > class nonfinite_num_get;
<nonfinite_num_get<CharType,InputIterator>
>является производным от<std::num_get<CharType,IntputIterator>
>. Таким образом, это грань, которая парсирует строки, которые представляют числа. Первым аргументом шаблона является тип символа строк, обычно<char
>или<wchar_t
>. Второй аргумент шаблона - это тип итератора, используемого для чтения строк. Он должен быть входным итератором. Обычно используется по умолчанию. Общественный интерфейс класса состоит только из одного конструктора:
nonfinite_num_get(int flags = 0);
Аргумент о флагах рассматривается ниже.<class
templatenonfinite_num_get
>определяется в заголовке<boost/math/nonfinite_num_facets.hpp
>и живет в<namespace
boost::math
>.
В отличие от граней<std::num_get
>, грань<nonfinite_num_get
>парсирует струны, которые представляют<infinity
>и<NaN
>последовательным и переносимым образом. Он точно распознает представления строк, указанные стандартом C99:
число |
Струна |
---|---|
Положительная бесконечность |
инф, бесконечность |
Положительная нан |
Нэн, Нэн (...) |
Отрицательная бесконечность |
-инф, -бесконечность |
Отрицательное НАН |
-nan, -nan(...) |
Эти числа могут быть типа<float
>,<double
>и<long
double
>. Лицевая сторона нечувствительна к случаю. Дополнительный знак + может использоваться с положительными числами. Точки в nan (...) обозначают произвольную строку, обычно содержащую.Полезная нагрузка NaN. Парсирование строк, представляющих целые числа, булевы значения и конечные числа с плавающей точкой делегировано на<std::num_get
>.
Когда грань парсирует строку, которая представляет<infinity
>на платформе, которой не хватает бесконечности, то устанавливается бит отказа потока.
Когда грань парсирует строку, которая представляет<NaN
>на платформе, которой не хватает NaN, то устанавливается бит отказа потока.
Конструкторы для<nonfinite_num_put
>и<nonfinite_num_get
>берут дополнительный бит флагов аргумент. Существует четыре разных битовых флага:
Флаги могут быть объединены с OR<operator|
>.
Флаги обозначены в заголовке<boost/math/nonfinite_num_facets.hpp
>и живут в<namespace
boost::math
>.
Унаследованный флаг не имеет эффекта с выходной гранью<nonfinite_num_put
>.
Если флаг наследия используется с<nonfinite_num_get
>входной гранью, то грань распознает все следующие представления строк<infinity
>и<NaN
>:
число |
Струна |
---|---|
Положительная бесконечность |
inf, infinity, one#inf |
Положительная нан |
nan, nan(...), nanq, nans, qnan, snan, one#ind, one#qnan, one#snan |
Отрицательная бесконечность |
-inf, -infinity, -one#inf |
Отрицательное НАН |
-nan, -nan(...), -nanq, -nans, -qnan, -snan, -one#ind, - one#qnan, -one#snan |
float
>,<double
>и<longdouble
>.+
>может использоваться с положительными значениями.nan(...)
>обозначают произвольную строку.one
>означает любую строку, которая<std::num_get
>парсирует как число<1
>, обычно «1.#INF», «1.QNAN», но также «000001.#INF» ...Список включает в себя ряд нестандартных струнных представлений бесконечности и NaN, которые используются различными существующими реализациями стандартной библиотеки C++, а также струнные представления, используемые другими языками программирования.
Если флаг<signed_zero
>используется с<nonfinite_num_put
>, то грань всегда будет различать положительный и отрицательный ноль. Он будет форматировать положительный ноль как «0» или «+0», а отрицательный ноль как «-0». Положительный ноль можно контролировать с помощью манипуляторов<showpos
>и<noshowpos
>.
<signed_zeroflag
>не имеет эффекта с входной гранью<nonfinite_num_get
>. Вводная грань<nonfinite_num_get
>всегда парсирует «0» и «+0» как положительный ноль и «-0» как отрицательный ноль, как и большинство реализаций<std::num_get
>.
![]() |
Note |
---|---|
Если флаг< |
![]() |
Tip |
---|---|
Отрицательное нулевое значение может быть получено с помощью функции< |
Если флаг<trap_infinity
>используется с<nonfinite_num_put
>, то грань бросит исключение типа<std::ios_base::failure
>при попытке форматировать положительную или отрицательную бесконечность. Если грань вызывается от оператора вставки потока, то поток улавливает это исключение и устанавливает либо его<fail
bit
>, либо его<bad
bit
>. Какой бит установлен, зависит от платформы.
Если флаг<trap_infinity
>используется с<nonfinite_num_get
>, то грань установит<fail
bit
>потока при попытке разобрать строку, представляющую положительную или отрицательную бесконечность.
(См. Обоснование дизайна ниже для обсуждения этой непоследовательности.)
Так же, как<trap_infinity
>, но вместо этого в ловушку попадают положительные и отрицательные NaN.
Статья Reference раздела Math Toolkit 2.5.0 Facets for Floating-Point Infinities and NaNs может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Facets for Floating-Point Infinities and NaNs ::
реклама |