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

Examples

Boost , Math Toolkit 2.5.0 , Chapter 3. Specified-width floating-point typedefs

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

Jahnke-Emden-Lambda function

Следующий код использует<<boost/cstdfloat.hpp>>в сочетании с<<boost/math/special_functions.hpp>>для вычисления упрощенной версии функцииЯнке-Эмден-Ламбда.. Здесь мы указываем тип плавающей точки сровно 64 битами(т.е.<float64_t>). Если бы мы использовали, например, встроенный<double>, то не было бы никакой гарантии, что код будет вести себя одинаково на всех платформах. При этом<float64_t>из<<boost/cstdfloat.hpp>>, скорее всего, будет идентичным.

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

#include <boost/cstdfloat.hpp> // For float_64_t, float128_t. Must be first include!
#include <cmath>  // for pow function.
#include <boost/math/special_functions.hpp> // For gamma function.
boost::float64_t jahnke_emden_lambda(boost::float64_t v, boost::float64_t x)
{
  const boost::float64_t gamma_v_plus_one = boost::math::tgamma(v + 1);
  const boost::float64_t x_half_pow_v     = std::pow(x /2, v);
  return gamma_v_plus_one * boost::math::cyl_bessel_j(x, v) / x_half_pow_v;
}

Убедитесь, что показаны все, возможно, значимые цифры (17), включая нули.

std::cout.precision(std::numeric_limits<boost::float64_t>::max_digits10);
std::cout.setf(std::ios::showpoint); // Show trailing zeros.
try
{ // Always use try'n'catch blocks to ensure any error messages are displayed.
// Evaluate and display an evaluation of the Jahnke-Emden lambda function:
boost::float64_t v = 1.;
boost::float64_t x = 1.;
std::cout << jahnke_emden_lambda(v, x) << std::endl; // 0.88010117148986700

Подробнее см.cstdfloat_example.cpp- обширная примерная программа.

Normal distribution table

В этом примере показаны таблицы печати PDF и CDF нормального распределения с использованием<boost::math>реализации нормального распределения.

Функция, созданная на типе с плавающей точкой, печатает таблицу для ряда стандартных значений z.

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

Количество отображаемых цифр контролируется точностью типа, поэтому нет ложных незначительных десятичных цифр:

float_32_t    0    0.39894228
float_128_t  0    0.398942280401432702863218082711682655

Некоторые выходные данные для двух различных платформ прилагаются к коду по адресуnormal_tables.cpp.

#ifdef BOOST_FLOAT32_C
    normal_table<boost::float32_t>(); // Usually type float
#endif
    normal_table<boost::float64_t>(); // Uusually type double. Assume that float64_t is always available.
#ifdef BOOST_FLOAT80_C
    normal_table<boost::float80_t>(); // Type long double on some X86 platforms.
#endif
#ifdef BOOST_FLOAT128_C
    normal_table<boost::float128_t>(); // Type _Quad on some Intel and __float128 on some GCC platforms.
#endif
    normal_table<boost::floatmax_t>();

PrevUpHomeNext

Статья Examples раздела Math Toolkit 2.5.0 Chapter 3. Specified-width floating-point typedefs может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 3. Specified-width floating-point typedefs ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 04:47:54/0.023016929626465/1