[/ Copyright 2011 - 2020 John Maddock. Copyright 2013 - 2019 Paul A. Bristow. Copyright 2013 Christopher Kormanyos. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt). ] [section:cpp_rational cpp_rational] `#include ` namespace boost{ namespace multiprecision{ typedef rational_adaptor > cpp_rational_backend; typedef number cpp_rational; }} // namespaces The `cpp_rational_backend` type is used via the typedef `boost::multiprecision::cpp_rational`. It provides a rational number type that is a drop-in replacement for the native C++ number types, but with unlimited precision. As well as the usual conversions from arithmetic and string types, instances of `cpp_rational` are copy constructible and assignable from type `cpp_int`. There is also a two argument constructor that accepts a numerator and denominator: both of type `cpp_int`. There are also non-member functions: cpp_int numerator(const cpp_rational&); cpp_int denominator(const cpp_rational&); which return the numerator and denominator of the number. Things you should know when using this type: * Default constructed `cpp_rational`s have the value zero. * Division by zero results in a `std::overflow_error` being thrown. * Conversion from a string results in a `std::runtime_error` being thrown if the string can not be interpreted as a valid rational number. [h5 Example:] [cpp_rational_eg] [endsect] [/section:rational Rational Number Types]