Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Reference

Boost , Math Toolkit 2.5.0 , Facets for Floating-Point Infinities and NaNs

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext
The Facet nonfinite_num_put
template<
  class CharType, class OutputIterator = std::ostreambuf_iterator<CharType>
        >
class nonfinite_num_put;

<classnonfinite_num_put<CharType,OutputIterator>>происходит от<std::num_put<CharType,OutputIterator>>. Таким образом, это аспект, который форматирует числа. Первым аргументом шаблона является тип символа отформатированных строк, обычно<char>или<wchar_t>. Второй аргумент шаблона - это тип итератора, используемого для написания строк. Он должен быть выходным итератором. Обычно используется по умолчанию<std::ostreambuf_iterator>. Общественный интерфейс класса состоит только из одного конструктора:

nonfinite_num_put(int flags = 0);

Аргумент флагов (фактически необязательный, потому что по умолчанию<no_flags>) обсуждается ниже. Шаблон класса<nonfinite_num_put>определен в заголовке<boost/math/nonfinite_num_facets.hpp>и живет в пространстве имен<boost::math>.

В отличие от C++ Standard facet<std::num_put>, форматы facet<nonfinite_num_put><infinity>и<NaN>последовательны и переносимы. Он использует следующие струнные представления:

число

Струна

Положительная бесконечность

Инф

Положительная нан

Нэн

Отрицательная бесконечность

-инф

Отрицательное НАН

-нан

Эти числа могут быть типа<float>,<double>и<long double>. Струны могут быть во всех нижних или во всех верхних случаях. Дополнительный знак + может использоваться с положительными числами. Это можно контролировать с помощью<uppercase>,<lowercase>,<showpos>и<noshowpos>манипуляторов. Форматирование целых чисел, булевых значений и конечных чисел с плавающей точкой просто делегировано нормальному<std::num_put>.

Facet 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, то устанавливается бит отказа потока.

Flags

Конструкторы для<nonfinite_num_put>и<nonfinite_num_get>берут дополнительный бит флагов аргумент. Существует четыре разных битовых флага:

  • наследие
  • Запись_ноль
  • Ловушка_бесконечность
  • Ловушка

Флаги могут быть объединены с OR<operator|>.

Флаги обозначены в заголовке<boost/math/nonfinite_num_facets.hpp>и живут в<namespace boost::math>.

legacy

Унаследованный флаг не имеет эффекта с выходной гранью<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

Если флаг<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] Note

Если флаг<signed_zero>не установлен (по умолчанию), то отрицательное нулевое значение будет отображаться на выходе любым способом, которым платформа обычно обрабатывает его. Для большинства платформ это будет форматировать положительный ноль как «0» или «+0», а отрицательный ноль как «-0». Но установка флага<signed_zero>может быть более портативной.

[Tip] Tip

Отрицательное нулевое значение может быть получено с помощью функции<(changesign)(static_cast<ValType>(0))>, где<ValType>является<float>,<double>или<longdouble>, или типа с плавающей точкой (UDT), определяемого пользователем, при условии, что этот UDT имеет знак и что функция изменения реализована.

trap_infinity

Если флаг<trap_infinity>используется с<nonfinite_num_put>, то грань бросит исключение типа<std::ios_base::failure>при попытке форматировать положительную или отрицательную бесконечность. Если грань вызывается от оператора вставки потока, то поток улавливает это исключение и устанавливает либо его<fail bit>, либо его<bad bit>. Какой бит установлен, зависит от платформы.

Если флаг<trap_infinity>используется с<nonfinite_num_get>, то грань установит<fail bit>потока при попытке разобрать строку, представляющую положительную или отрицательную бесконечность.

(См. Обоснование дизайна ниже для обсуждения этой непоследовательности.)

trap_nan

Так же, как<trap_infinity>, но вместо этого в ловушку попадают положительные и отрицательные NaN.


PrevUpHomeNext

Статья Reference раздела Math Toolkit 2.5.0 Facets for Floating-Point Infinities and NaNs может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Facets for Floating-Point Infinities and NaNs ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 06:33:13/0.0098640918731689/1