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

gmp_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/gmp.hpp>>

namespace boost{ namespace multiprecision{
class gmp_rational;
typedef number<gmp_rational >         mpq_rational;
}} // namespaces

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

Как и обычные преобразования из арифметических и струнных типов, экземпляры<number<gmp_rational>>являются копируемыми и присваиваемыми из:

  • GMPродные типы:<mpz_t>,<mpq_t>.
  • <number<gmp_int>>.

Существует также двухаргументный конструктор, который принимает числитель и знаменатель (оба типа<number<gmp_int>>).

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

mpz_int numerator(const mpq_rational&);
mpz_int denominator(const mpq_rational&);

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

Также можно получить доступ к базовой функции<mpq_t>через функцию<data()>члена<mpq_rational>.

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

  • По умолчанию построенные<mpq_rational>s имеют значение ноль (этоGMPповедение по умолчанию).
  • Разбиение на ноль приводит к тому, что<std::overflow_error>выбрасывается.
  • Преобразование из строки приводит к тому, что<std::runtime_error>выбрасывается, если строка не может быть интерпретирована как действительное рациональное число.
  • В глобальные настройки библиотекиGMPизменений не вносится, поэтому этот тип может сосуществовать с существующимGMPкодом.
  • Код в равной степени может использоваться сMPIRв качестве базовой библиотеки - действительно, это предпочтительный вариант на Win32.
Example:
#include <boost/multiprecision/gmp.hpp>
#include <boost/multiprecision/gmp.hpp>
#include <iostream>
int main()
{
   using namespace boost::multiprecision;
   mpq_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;
   mpq_rational w(2, 3);  // component wise constructor
   std::cout << w << std::endl; // prints 2/3
   // Access the underlying data:
   mpq_t q;
   mpq_init(q);
   mpq_set(q, v.backend().data());
   mpq_clear(q);
   return 0;
}

PrevUpHomeNext

Статья gmp_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 18:43:41/0.0065910816192627/0