gpt4 book ai didi

c++ - 是否有等同于 Python 的 fractions.Fraction (bignum/arbitrary-precision fraction/rational number class)?

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:45 26 4
gpt4 key购买 nike

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

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

是否有一个库可以让我以直接的方式执行此操作?

最佳答案

如果您使用的是 boost,则可以将 boost::rationalboost::multiprecision::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/arbitrary-precision fraction/rational number class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31054383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com