首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有相当于Python的fractions.Fraction (bignum/任意精度分数/有理数类)?

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

Stack Overflow用户
提问于 2015-06-25 15:18:10
回答 1查看 262关注 0票数 2

我想对有理数做一些任意精确的计算,例如:

代码语言:javascript
复制
>>> from fractions import Fraction
>>> Fraction(318483434, 1980410394309430943904903) * Fraction(34913483843843843843, 902490524905498548954894898889923232)
Fraction(5559683113745453573439198431, 893650808144311844544465740142994088494601632782777989203248)

是否有一个图书馆可以让我以一种简单的方式来做这件事呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 15:18:10

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

代码语言:javascript
复制
#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对象:

代码语言:javascript
复制
template <typename A, typename B>
fraction_t fraction(A a, B b) 
{
    return fraction_t(cpp_int(a), cpp_int(b));
}

用法

代码语言:javascript
复制
cout << fraction(318483434, "1980410394309430943904903") * 
        fraction("34913483843843843843", "902490524905498548954894898889923232") << endl;

输出:

代码语言:javascript
复制
5559683113745453573439198431/893650808144311844544465740142994088494601632782777989203248
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31054383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档