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

Internal Floating-point Promotion Policies

Boost , Math Toolkit 2.5.0 , Policy Reference

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

Обычно при оценке функции с точностью, скажем<float>, максимальная точность обеспечивается проведением расчета с точностью<double>внутри, а затем округлением результата. Существует две политики, которые контролируют, происходит ли внутреннее продвижение к более точному типу плавающей точки:

Политика

значение

<boost::math::policies::promote_float<B>>

Указывает на то, что<float>аргументы следует продвигать к<double>точности внутри: по умолчанию к<boost::math::policies::promote_float<true>>

<boost::math::policies::promote_double<B>>

Указывает, следует ли<double>аргументы продвигать к<long double>точности внутри: дефолты к<boost::math::policies::promote_double<true>>

Examples

Предположим, что мы хотим, чтобы<tgamma>оценивалось без внутреннего продвижения<long double>, тогда мы могли бы использовать:

#include <boost/math/special_functions/gamma.hpp>
using namespace boost::math::policies;
using boost::math::tgamma;
// Define a new policy *not* internally promoting RealType to double:
typedef policy<
      promote_double<false>
      > my_policy;
// Call the function, applying the new policy:
double t1 = tgamma(some_value, my_policy());
// Alternatively we could use helper function make_policy,
// and concisely define everything at the call site:
double t2 = tgamma(some_value, make_policy(promote_double<false>()));

В качестве альтернативы, предположим, что мы хотим, чтобы распределение выполняло вычисления без продвижения<float>к<double>, тогда мы могли бы использовать:

#include <boost/math/distributions/normal.hpp>
using boost::math::normal_distribution;
using namespace boost::math::policies;
// Define a policy:
typedef policy<
      promote_float<false>
      > my_policy;
// Define the new normal distribution using my_policy:
typedef normal_distribution<float, my_policy> my_norm;
// Get a quantile:
float q = quantile(my_norm(), 0.05f);

PrevUpHomeNext

Статья Internal Floating-point Promotion Policies раздела Math Toolkit 2.5.0 Policy Reference может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Policy Reference ::


реклама


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

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