Прежде всего, вам нужно выбрать базовый тип. Для получения полезного интервального типа числа должны соответствовать некоторым требованиям. Пожалуйста, обратитесь кэтой странице, чтобы увидеть их. Когда ваш базовый тип достаточно надежен, вы можете перейти к следующему шагу: выбор политики.
Как вы уже должны знать, если вы не попали на эту страницу случайно, класс<interval>ожидает аргумент политики, описывающийокруглениеипроверкаполитики. Первое, что нужно сделать, это проверить, адаптированы ли политики по умолчанию к вашему случаю. Если ваш базовый тип не<float>,<double>или<long double>, политика округления по умолчанию, вероятно, не адаптирована. Однако, специализируясь<interval_lib::rounded_math>на вашем базовом типе, политика округления по умолчанию будет подходящей.
Политики по умолчанию определяют тип интервала, который выполняет точные вычисления (для<float>,<double>,<long
double>), обнаруживает недействительные числа и бросает исключение каждый раз, когда создается пустой интервал. Это краткое описание, и вы должны обратиться к соответствующим разделам для более точного описания политики по умолчанию. Если вам не нужно какое-то особое поведение, этот тип по умолчанию может использоваться во многих ситуациях.
После полного определения типа интервала (и его политики) остается только убедиться, что константы определены и<std::numeric_limits>верны (при необходимости). Теперь вы можете использовать новый тип интервала.
Some Examples
Solving systems
Если вы используете библиотеку интервалов для решения уравнений и систем уравнений путем разбиения, что-то вроде<boost::interval<double>>, вероятно, вам нужно. Вычисления точны, и они могут быть быстрыми, если заключены в защищенный блок режима округления (см. разделпроизводительность). Сравнение является «определенным»; это, вероятно, наиболее используемый тип сравнения, а другие сравнения все еще доступны с помощью явных функций сравнения. Проверка запрещает пустой интервал; они не нужны, поскольку в конце вычисления будет пустой интервал, если пустой интервал создается во время вычисления, и внутри не будет корня. Проверка также запрещает недействительные числа (NaN для чисел с плавающей запятой). Это может быть незначительным ударом по производительности, если вы используете только точные константы с плавающей запятой (которые явно не NaNs); однако, если производительность действительно имеет значение, вы, вероятно, будете использовать хороший компилятор, который знает, как включить функции, и все эти раздражающие небольшие тесты волшебным образом исчезнут (если нет, пришло время обновить ваш компилятор).
Manipulating wide intervals
Вы можете использовать библиотеку на интервалах с неточными границами или на неточных числах. В частности, это может быть существующий алгоритм, который вы хотите переписать и упростить с помощью библиотеки. В этом случае вас не интересует свойство включения; вас интересуют только вычислительные алгоритмы, предоставляемые библиотекой. Таким образом, вам не нужно использовать какую-либо округлость; проверка также может быть бесполезной. Используйте округление «точное вычисление» (вы можете думать, что название странно относится к ситуации) и проверку, которая никогда не проверяет наличие недействительных чисел или пустых интервалов. При этом функции библиотеки будут сокращены до минимума (добавление двух интервалов будет только двумя добавлениями чисел).
Computing ranges
Входные данные вашей программы могут быть пустыми интервалами или недействительными значениями (например, база данных может разрешать неопределенные значения в некоторой области), а ядро вашей программы также может выполнять некоторые неарифметические вычисления, которые не всегда распространяют пустые интервалы. Например, в библиотеке функция<hull>может с радостью получать пустой интервал, но не генерировать пустой интервал, если другой вход действителен. Функция<intersect>также способна создавать пустые интервалы, если интервалы не перекрываются. В этом случае не очень интересно, если исключение выбрасывается каждый раз, когда создается пустой интервал или используется недействительное значение; было бы лучше генерировать и распространять пустые интервалы. Так что вам нужно изменить политику проверки на что-то вроде<interval_lib::checking_base<T>>.
Switching interval types
Этот пример касается не полного случая, а ситуации, которая может возникать часто. Иногда может быть полезно изменить политику интервала, превратив его в другой тип. Например, это происходит, когда вы используете незащищенную версию типа интервала для ускорения вычислений; это изменение политики округления. Это также происходит, когда вы хотите временно разрешить создание пустых интервалов; это изменение политики проверки. Эти изменения не должны быть запрещены: они могут значительно улучшить программу (наличие, интерес, производительность).
Статья Choosing Your Own Interval Type раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.