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

Conceptual Requirements for Real Number Types

Boost , Math Toolkit 2.5.0 , Chapter 14. Use with User-Defined Floating-Point Types - Boost.Multiprecision and others -

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

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

Также могут использоваться определяемые пользователем типы, отвечающие концептуальным требованиям. Например, можно использовать класс тонкой обертки одного из типов, обеспеченных NTL (RR). Но теперь, когда доступна библиотека Boost.Multiprecision, это стало предпочтительным типом реального числа, обычно cpp_dec_float или cpp_bin_float.

Приветствуются также представления, имеющие обязательную силу для других типов с расширенной точностью.

Основной принцип, лежащий в основе этих требований, заключается в том, что RealType ведет себя так же, как встроенный тип с плавающей точкой.

Basic Arithmetic Requirements

Эти требования являются общими для всех функций этой библиотеки.

В следующей таблице r находится объект типа RealType, cr и cr2 являются объектами типа const RealType, а ca является объектом типа const--type (арифметические типы включают все встроенные в целые числа и типы с плавающей точкой).

Выражение

Тип результата

Заметки

RealType(cr

Реальный тип

RealType является копируемым.

RealType(ca

Реальный тип

RealType является копируемым из арифметических типов.

r = cr<8

RealType&

Оператор назначения.

r = ca<8

RealType&

Оператор назначения из арифметических типов.

r += cr<8

RealType&

Добавляет cr в r.

r += ca<8

RealType&

Добавляет ar к r.

r -= cr<8

RealType&

Вычитает cr из r.

r -= ca<8

RealType&

Вычитает ca из r.

r *= cr<8

RealType&

Умножает r на cr.

r *= ca<8

RealType&

Умножает r на ca.

r /= cr<8

RealType&

Разделяет r на cr.

r /= ca<8

RealType&

Разделяет r на ca.

-r

Реальный тип

Унарное отрицание.

+r

RealType&

Операция идентификации.

cr + cr2<8

Реальный тип

Бинарная добавка

cr + ca<8

Реальный тип

Бинарная добавка

ca + cr<8

Реальный тип

Бинарная добавка

cr - cr2<8

Реальный тип

Бинарное вычитание

cr - ca<8

Реальный тип

Бинарное вычитание

ca - cr<8

Реальный тип

Бинарное вычитание

cr cr2<8

Реальный тип

Бинарное умножение

cr ca<8

Реальный тип

Бинарное умножение

ca * cr<8

Реальный тип

Бинарное умножение

cr / cr2<8

Реальный тип

Бинарное вычитание

cr / ca<8

Реальный тип

Бинарное вычитание

ca / cr<8

Реальный тип

Бинарное вычитание

cr == cr2<8

буль

Сравнение показателей

cr == ca<8

буль

Сравнение показателей

ca == cr<8

буль

Сравнение показателей

cr != cr2<8

буль

Сравнение неравенства

cr != ca<8

буль

Сравнение неравенства

ca != cr<8

буль

Сравнение неравенства

cr <= cr2<8

буль

Менее чем равно.

cr <= ca<8

буль

Менее чем равно.

ca <= cr<8

буль

Менее чем равно.

cr >= cr2<8

буль

Больше, чем равно.

cr >= ca<8

буль

Больше, чем равно.

ca >= cr<8

буль

Больше, чем равно.

cr < cr2<8

буль

Меньше, чем сравнение.

cr < ca<8

буль

Меньше, чем сравнение.

ca < cr<8

буль

Меньше, чем сравнение.

cr > cr2<8

буль

Больше, чем сравнение.

cr > ca<8

буль

Больше, чем сравнение.

ca > cr<8

буль

Больше, чем сравнение.

boost::::tools::digits<RealType>()

int

Количество цифр в значении и RealType.

boost::::tools::max_value<RealType>()

Реальный тип

Наибольшее репрезентабельное число по типу RealType.

boost::::tools::min_value<RealType>()

Реальный тип

Наименьшее репрезентабельное число по типу RealType.

boost::::tools::log_max_value<RealType>()

Реальный тип

Натуральный логарифм наибольшего репрезентабельного числа по типу RealType.

boost::::tools::log_min_value<RealType>()

Реальный тип

Натуральный логарифм наименьшего репрезентабельного числа по типу RealType.

boost::::tools::epsilon<RealType>()

Реальный тип

Эпсилон машины RealType.

Обратите внимание:

  1. Функции log_max_value и log_min_value могут быть синтезированы из других, и поэтому не требуется явной специализации.
  2. Функция epsilon может быть синтезирована из других, поэтому не требуется явной специализации при условии, что точность RealType не изменяется во время выполнения (см. заголовок boost/math/bindings/rr.hpp для примера, где точность изменяется во время выполнения).
  3. Функции цифры, max_value и min_value автоматически синтезируются из std::численные_лимиты. Однако, если numeric_limits не специализируется на типе RealType, то вы получите ошибку компилятора, когда код попытается использовать эти функции, если только вы явно не специализируетесь на них. Например, если точность RealType изменяется во время выполнения, то поддержка numeric_limits может быть неподходящей, см. boost/math/bindings/rr.hpp для примеров.
[Warning] Warning

Если std::numeric_limits<> является не специализированным для типа RealType, то по умолчанию поплавковая точность 6 десятичных цифр будет использоваться другими программами Boost, включая:

Повышаю. Тест: предоставление вводящих в заблуждение сообщений об ошибках

"разница между {9.79796} и {9.79796} превышает 5.42101e-19%".

Boost.Lexical Снято и увеличено. Сериализация при преобразовании числа в строку, вызывая потенциально серьезную потерю точности на выходе.

Хотя может показаться очевидным, что RealType должен требовать специализации std::numeric_limits, для NTL::RR и аналогичных классов, где число цифр является параметром времени выполнения (в то время как для numeric_limits все должно быть зафиксировано во время компиляции).

Standard Library Support Requirements

Многие (хотя и не все) функции этой библиотеки выполняют вызовы к стандартным библиотечным функциям. Обратите внимание, что большинство функций в этой библиотеке будут вызывать только небольшое подмножество функций, перечисленных здесь, поэтому, если вы сомневаетесь в том, что тип, определенный пользователем, имеет достаточную стандартную поддержку библиотеки, лучше всего попробовать и посмотреть!

В следующей таблице r находится объект типа RealType, cr1 и cr2 являются объектами типа const RealType, а i является объектом типа int.

Выражение

Тип результата

fabs(cr1)

Реальный тип

abs(cr1)

Реальный тип

ceil (cr1)

Реальный тип

пол (cr1)

Реальный тип

exp (cr1)

Реальный тип

pow(cr1, cr2>

Реальный тип

sqrt(cr1)

Реальный тип

log(cr1)

Реальный тип

frexp(cr1, &i

Реальный тип

ldexp(cr1, i

Реальный тип

cos(cr1)

Реальный тип

sin(cr1)

Реальный тип

asin(cr1)

Реальный тип

tan(cr1)

Реальный тип

atan(cr1)

Реальный тип

fmod (cr1)

Реальный тип

round(cr1)

Реальный тип

iround (cr1)

int

trunc (cr1)

Реальный тип

itrunc (cr1)

int

Обратите внимание, что в приведенной выше таблице перечислены только те стандартные библиотечные функции, которые, как известно, будут использоваться (или, вероятно, будут использоваться в ближайшем будущем) этой библиотекой. Следующие функции: acos, atan2, cosh, sinh, tanh, log10, lround, ltrunc, lltrunc и modf в настоящее время не используются, но могут быть добавлены дополнительные специальные функции.

Обратите внимание, что функции round, trunc и modf не являются частью текущего стандарта C++: они являются частью дополнений, добавленных к C99, которые, вероятно, будут в следующем стандарте C++. Существуют версии Boost, которые предоставляются в качестве резервной копии, и функции всегда называются неквалифицированными, чтобы можно было выполнять поиск, основанный на аргументах.

Кроме того, для эффективных и точных результатов крайне желательно приближение Lanczos. Вы можете адаптировать существующее приближение от boost/math/special_functions/lanczos.hpp или boost/math/bindings/detail/big_lanczos.hpp: в первом случае вам потребуется изменить static_cast на lexical_cast, а константы на strings (чтобы коэффициенты не усечены до longdouble) и затем специализироваться на lanczos_traits для типа T. В противном случае вам, возможно, придется взломать libs/math/tools/lanczos_generator.cpp, чтобы найти подходящее приближение для вашего RealType. Код все равно будет компилироваться, если вы этого не сделаете, но точность и эффективность будут сильно скомпрометированы в любой функции, которая использует семейство функций гамма / бета / эрф.


PrevUpHomeNext

Статья Conceptual Requirements for Real Number Types раздела Math Toolkit 2.5.0 Chapter 14. Use with User-Defined Floating-Point Types - Boost.Multiprecision and others - может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 14. Use with User-Defined Floating-Point Types - Boost.Multiprecision and others - ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 01:27:48/0.0090758800506592/1