⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aprat.cpp

📁 任意精度计算的实现
💻 CPP
字号:
#include "ap.h"
#include "aprat.h"


using namespace std;


bool aprational::autoreduce = true;


inline size_t max (size_t a, size_t b)
{
    return (a > b ? a : b);
}

// More complicated aprational operators

ostream &operator<< (ostream &str, const aprational &r)
{
    str << r.nom << '/' << r.den;

    return str;
}

istream &operator>> (istream &str, aprational &r)
{
    char c;
    aprational t;

    if (str >> t.nom)
    {
        if (str >> c && c != '/')
        {
            str.putback (c);
            t.den = 1;
        }
        else
        {
            str >> t.den;
        }
    }

    if (!str.fail ())
        r = t;

    return str;
}

void aprational::reduce (void)
{
    apint g = gcd (nom, den);

    nom /= g;
    den /= g;
}

apfloat aprational::approx (size_t prec)
{
    apfloat n, d;

    if (prec == (size_t) DEFAULT)
        prec = Basedigits * max (nom.val.ap->size, den.val.ap->size);

    n = nom.val;
    d = den.val;

    n.prec (prec + 3 * Basedigits);
    d.prec (prec + 3 * Basedigits);

    n = n / d;

    n.prec (prec);

    return n;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -