我想对有理数进行一些任意精度的数学运算,例如:
>>> from fractions import Fraction
>>> Fraction(318483434, 1980410394309430943904903) * Fraction(34913483843843843843, 902490524905498548954894898889923232)
Fraction(5559683113745453573439198431, 893650808144311844544465740142994088494601632782777989203248)
是否有一个库可以让我以简单的方式完成此操作?
最佳答案
如果您使用 boost,则可以将 boost::rational
与 boost::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/