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

Numbers Requirements

Boost , ,

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

Numbers Requirements

То, что мы называем числом, является базовым типом класса<interval>. Интервал библиотеки ожидает много свойств от этого базового типа, чтобы уважать свойство включения. Все эти свойства уже подробно описаны в других разделах этой документации, но мы постараемся обобщить их здесь.

Ordering

Номера должны быть снабжены заказом. Этот заказ выражает себя операторами<< <= => > == !=>. Это должен быть полный порядок (рефлексивность, антисимметрия, транзитивность, и каждая пара чисел упорядочена). Так что<complex<T>>не будет хорошим кандидатом для базового типа; если вам нужно включение свойства интервального свойства, вы должны использовать<complex< interval<T> >>вместо<interval< complex<T> >>(но, к сожалению,<complex>только обеспечивает специализацию).

Обратите внимание, что недействительные числа не связаны с порядком; может быть даже концептуально лучше, если сравнение с этими недействительными числами всегда<false>(за исключением<!=>). Если ваша политика проверки использует<interval_lib::checking_base>и ваш базовый тип содержит недействительные номера, то это свойство необходимо:<nan!=nan>(здесь<nan>— недействительное число). Если этого свойства нет, то не следует использовать<checking_base>напрямую.

Интервальная арифметика предполагает большое сравнение с нулем. По умолчанию они выполняются путем сравнения чисел с<static_cast<T>(0)>. Однако, если формат чисел позволяет проводить более быстрые сравнения при работе с нулем, функции шаблона в пространстве имен<interval_lib::user>могут быть специализированы:

namespace user {
template<class T> inline bool is_zero(T const &v) { return v == static_cast<T>(0); }
template<class T> inline bool is_neg (T const &v) { return v <  static_cast<T>(0); }
template<class T> inline bool is_pos (T const &v) { return v >  static_cast<T>(0); }
}

Numeric limits

Еще одно замечание о политике проверки. Обычно она достаточно сильна, чтобы справиться с исключительным поведением, которое может вызвать основной тип; в частности, бесконечные и недействительные числа (благодаря четырем функциям<pos_inf>,<neg_inf>,<nan>и<is_nan>). Однако, если вы используете<interval_lib::checking_base>(и политика проверки по умолчанию использует его), ваш базовый тип должен иметь правильно специализированный<std::numeric_limits<T>>. В частности, значения<has_infinity>и<has_quiet_NaN>, а также функции<infinity>и<quiet_NaN>должны быть соответственно определены.

Итак, подводя итог, если вы не полагаетесь на политику по умолчанию и не используете<interval_lib::checking_base>, не обязательно иметь специализацию по численным ограничениям для вашего базового типа.

Mathematical properties

Обеспечение правильного упорядочения цифр недостаточно. Основные операторы также должны соблюдать некоторые свойства в зависимости от заказа. Вот они:

  • 0 ≤x⇒ -x≤ 0
  • xy⇒ -y≤ -x
  • xyx+zy+z
  • xyиz≥ 0 ⇒x×zу×z
  • 0<xy⇒ 0< 1/y≤ 1/x

Предыдущие свойства также используются (и достаточно) для<abs>,<square>и<pow>. Для всех трансцендентных функций (включая<sqrt>) необходимы другие свойства. Эти функции должны обладать теми же свойствами, что и соответствующие реальные функции. Например, ожидаемыми свойствами<cos>являются:

  • cosопределяется для всех действительных чисел;
  • 2πпериодический;
  • cos(2π-x) равноcosx;
  • cosявляется убывающей функцией [0,2π].

Rounding

Если вы работаете с базовым типом, и нет точного результата, вы можете пропустить остальную часть этого пункта. Вы также можете пропустить его, если вас не интересует свойство включения (если приблизительных результатов достаточно). Если вы все еще читаете, это, вероятно, потому, что вы хотите знать основные свойства, которые должна подтвердить политика округления.

Какую бы операцию или функцию вы ни рассматривали, следует уважать следующее свойство:<f_down(x,y) <= f(x,y) <= f_up(x,y)>. Здесь<f>обозначает бесконечно точную вычисленную функцию и<f_down>и<f_up>являются функциями, которые возвращают, возможно, неточные значения, но правильного типа (базового типа). По возможности они должны попытаться вернуть ближайшую репрезентативную величину, но это не всегда легко.

Constants

Для правильной работы тригонометрических функций библиотеке необходимо знать значение π константы (а также π/2 и 2π). Поскольку эти константы не могут быть представлены в базовом типе, библиотеке не нужно знать точное значение: достаточно нижней границы и верхней границы. Если эти значения не предоставлены пользователем, будут использоваться значения по умолчанию: они являются целыми значениями (so π ограничено 3 и 4).

Operators and conversions

Как объяснялось в начале, операторы сравнения должны быть определены для базового типа. Политика округления определяет множество функций, используемых библиотекой интервалов. Таким образом, операторы арифметики не обязательно должны быть определены для базового типа (если это не требуется для одного из заранее определенных классов). Однако есть исключение: нужно определить унарный минус. Кроме того, этот оператор должен предоставлять только точные результаты; именно поэтому политика округления не обеспечивает некоторые функции отрицания.

Необходимо определить переход от<int>к базовому типу (необходимо иметь только несколько значений: -1, 0, 1, 2). Обращение в другую сторону обеспечивается политикой округления (<int_down>и<int_up>членов); и никакое другое преобразование строго не требуется. Однако, возможно, было бы полезно обеспечить как можно больше конверсий в политике округления (<conv_down>и<conv_up>членов), чтобы извлечь выгоду из интервальных конверсий.


Valid HTML 4.01 Transitional

Пересмотренный2006-12-242006-12-24[ORIG_END] -->

Copyright © 2002 Guillaume Melquiond, Sylvain Pion, Hervé Brönnimann, Polytechnic University
Copyright © 2004 Guillaume Melquiond

Распространяется в соответствии с лицензией Boost Software License, Version 1.0. (См. сопроводительный файлLICENSE_1_0.txtили копию в) http://www.boost.org/LICENSE_1_0.txt

Статья Numbers Requirements раздела может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:24:16/0.0070700645446777/1