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

tommath_rational

Boost , Chapter 1. Boost.Multiprecision , Rational Number Types

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

<#include<boost/multiprecision/tommath.hpp>>

namespace boost{ namespace multiprecision{
typedef rational_adpater<tommath_int>        tommath_rational;
typedef number<tommath_rational >         tom_rational;
}} // namespaces

При этом<tommath_rational>используется как<boost::multiprecision::tom_rational>. Он действует как тонкая обертка вокруг<boost::rational<tom_int>>, чтобы обеспечить рациональный тип чисел, который является заменой для родных типов чисел C++, но с неограниченной точностью.

Преимущество использования этого типа, а не<boost::rational<tom_int>>напрямую, заключается в том, что он активирован экспрессионным шаблоном, что значительно сокращает количество времен, созданных в сложных выражениях.

Существуют также функции, не являющиеся членами:

tom_int numerator(const tom_rational&);
tom_int denominator(const tom_rational&);

который возвращает числитель и знаменатель числа.

Что вы должны знать при использовании этого типа:

  • По умолчанию построенные<tom_rational>s имеют значение ноль (это унаследованное Boost.Rational поведение).
  • Разбиение на ноль приводит к тому, что<std::overflow_error>выбрасывается.
  • Преобразование из строки приводит к тому, что<std::runtime_error>бросается, если строка не может быть интерпретирована как действительное рациональное число.
  • Никаких изменений вlibtommathне вносится, поэтому этот тип может безопасно сосуществовать с другимlibtommathкодом.
  • Производительность этого типа была признана довольно плохой - это требует дальнейшего расследования - но, похоже, что Boost. Рациональность нуждается в некотором улучшении в этой области.
Example:
#include <boost/multiprecision/tommath.hpp>
#include <iostream>
int main()
{
   using namespace boost::multiprecision;
   tom_rational v = 1;
   // Do some arithmetic:
   for(unsigned i = 1; i <= 1000; ++i)
      v *= i;
   v /= 10;
   std::cout << v << std::endl; // prints 1000! / 10
   std::cout << numerator(v) << std::endl;
   std::cout << denominator(v) << std::endl;
   tom_rational w(2, 3); // Component wise constructor
   std::cout << w << std::endl; // prints 2/3
   return 0;
}

PrevUpHomeNext

Статья tommath_rational раздела Chapter 1. Boost.Multiprecision Rational Number Types может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Rational Number Types ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 19:21:07/0.0084390640258789/1