#включает </мультиплексия/cpp_int.hpp>
namespace boost{ namespace multiprecision{
typedef rational_adaptor<cpp_int_backend<> > cpp_rational_backend;
typedef number<cpp_rational_backend> cpp_rational;
}}
Тип cpp_rational_backend
используется через typedef boost::multiprecision::cpp_rational
. Он обеспечивает рациональный тип чисел, который является заменой для родных типов чисел C++, но с неограниченной точностью.
Как и обычные преобразования из арифметических и струнных типов, экземпляры cpp_rational
являются копируемыми и присваиваемыми из типа cpp_int
.
Существует также два конструктора аргументов, которые принимают числитель и знаменатель: оба типа cpp_int
.
Существуют также функции, не являющиеся членами:
cpp_int numerator(const cpp_rational&);
cpp_int denominator(const cpp_rational&);
который возвращает числитель и знаменатель числа.
Что вы должны знать при использовании этого типа:
- По умолчанию построенные
cpp_rational
s имеют значение ноль.
- Разделение на ноль приводит к выпадению
std::overflow_error
.
- Конверсия из строки приводит к тому, что
std::runtime_error
выбрасывается, если строка не может быть интерпретирована как действительное рациональное число.
#include <boost/multiprecision/cpp_int.hpp>
#include <iostream>
int main()
{
using namespace boost::multiprecision;
cpp_rational v = 1;
for(unsigned i = 1; i <= 1000; ++i)
v *= i;
v /= 10;
std::cout << v << std::endl;
std::cout << numerator(v) << std::endl;
std::cout << denominator(v) << std::endl;
cpp_rational w(2, 3);
std::cout << w << std::endl;
return 0;
}