c++ - 是否有相当于Python的fractions.Fraction(bignum/任意精度分数/有理数类)?

标签 c++ math fractions bignum arbitrary-precision

我想对有理数进行一些任意精度的数学运算,例如:

>>> from fractions import Fraction
>>> Fraction(318483434, 1980410394309430943904903) * Fraction(34913483843843843843, 902490524905498548954894898889923232)
Fraction(5559683113745453573439198431, 893650808144311844544465740142994088494601632782777989203248)

是否有一个库可以让我以简单的方式完成此操作?

最佳答案

如果您使用 boost,则可以将 boost::rationalboost::multi precision::cpp_int (任意精度整数)结合使用:

#include <boost/rational.hpp>
#include <boost/multiprecision/cpp_int.hpp>

using boost::multiprecision::cpp_int;

typedef boost::rational<cpp_int> fraction_t;

由于某种原因,构造函数 fraction_t("1", "2") 不起作用,尽管 cpp_int("1") 起作用,所以如果您需要大的 int 文字,您可以使用此辅助函数,以便在每次创建分数时不需要显式构造 cpp_int 对象:

template <typename A, typename B>
fraction_t fraction(A a, B b) 
{
    return fraction_t(cpp_int(a), cpp_int(b));
}

Usage :

cout << fraction(318483434, "1980410394309430943904903") * 
        fraction("34913483843843843843", "902490524905498548954894898889923232") << endl;

输出:

5559683113745453573439198431/893650808144311844544465740142994088494601632782777989203248

关于c++ - 是否有相当于Python的fractions.Fraction(bignum/任意精度分数/有理数类)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31054383/

相关文章:

c++ - 如何让 Visual Studio 2017 自动签署 Win32 应用程序?

c++ - 信号与槽 - 传递数据

javascript - 查找具有 x 行、y 列定义的 maxWidth 和 maxHeight 的容器的大小

javascript - 在设定时间内从零增加到数字

PHP:range() 可以用于分数吗?

c++ - std::list,仅使用迭代器移动列表中的项目

algorithm - 将水果放入盒子中的最小 Action

sql - PostgreSQL 中的分数格式为二分之一、三分之一或四分之一

python - 分数不完整

c++ - 简单的正则表达式似乎不工作 C++