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

📄 aprat.h

📁 任意精度计算的实现
💻 H
📖 第 1 页 / 共 2 页
字号:
    operator apfloat () { return nom / den; }

    // Other functions
    void reduce (void);
    apfloat approx (size_t prec = (size_t) DEFAULT);
    void swapfrom (char *filename1, char *filename2) { nom.swapfrom (filename1); den.swapfrom (filename2); }
    void swapto (char *filename1, char *filename2) { nom.swapto (filename1); den.swapto (filename2); }

    // Global variables
    static bool autoreduce;

    // Implementation
    apint nom, den;                           // Won't be private
};


// Inline aprational functions

inline aprational aprational::operator+ () const
{
    return *this;
}

inline aprational aprational::operator- () const
{
    return aprational (-nom, den);
}


// Definitions of compound-assignment operator member functions

inline aprational &aprational::operator+= (const aprational &r)
{
    nom = nom * r.den + den * r.nom;
    den = den * r.den;

    if (autoreduce) reduce ();

    return *this;
}

inline aprational &aprational::operator+= (const apint &d)
{
    nom = nom + den * d;

    if (autoreduce) reduce ();

    return *this;
}

inline aprational &aprational::operator-= (const aprational &r)
{
    nom = nom * r.den - den * r.nom;
    den = den * r.den;

    if (autoreduce) reduce ();

    return *this;
}

inline aprational &aprational::operator-= (const apint &d)
{
    nom = nom - den * d;

    if (autoreduce) reduce ();

    return *this;
}

inline aprational &aprational::operator*= (const aprational &r)
{
    nom = nom * r.nom;
    den = den * r.den;

    if (autoreduce) reduce ();

    return *this;
}

inline aprational &aprational::operator*= (const apint &d)
{
    nom = nom * d;

    if (autoreduce) reduce ();

    return *this;
}

inline aprational &aprational::operator/= (const aprational &r)
{
    nom = nom * r.den;
    den = den * r.nom;

    if (autoreduce) reduce ();

    return *this;
}

inline aprational &aprational::operator/= (const apint &d)
{
    den = den * d;

    if (autoreduce) reduce ();

    return *this;
}


// Overloaded mathematical functions

aprational pow (aprational base, unsigned long exp);
aprational pow (aprational base, unsigned exp);
aprational pow (aprational base, long exp);
aprational pow (aprational base, int exp);

// Definitions of non-member binary operator functions

inline aprational operator+ (const aprational &r1, const aprational &r2)
{
    return aprational (r1.nom * r2.den + r1.den * r2.nom, r1.den * r2.den);
}

inline aprational operator+ (const apint &d1, const aprational &r2)
{
    return aprational (d1 * r2.den + r2.nom, r2.den);
}

inline aprational operator+ (const aprational &r1, const apint &d2)
{
    return aprational (r1.nom + r1.den * d2, r1.den);
}

inline aprational operator- (const aprational &r1, const aprational &r2)
{
    return aprational (r1.nom * r2.den - r1.den * r2.nom, r1.den * r2.den);
}

inline aprational operator- (const apint &d1, const aprational &r2)
{
    return aprational (d1 * r2.den - r2.nom, r2.den);
}

inline aprational operator- (const aprational &r1, const apint &d2)
{
    return aprational (r1.nom - r1.den * d2, r1.den);
}

inline aprational operator* (const aprational &r1, const aprational &r2)
{
    return aprational (r1.nom * r2.nom, r1.den * r2.den);
}

inline aprational operator* (const apint &d1, const aprational &r2)
{
    return aprational (d1 * r2.nom, r2.den);
}

inline aprational operator* (const aprational &r1, const apint &d2)
{
    return aprational (r1.nom * d2, r1.den);
}

inline aprational operator/ (const aprational &r1, const aprational &r2)
{
    return aprational (r1.nom * r2.den, r1.den * r2.nom);
}

inline aprational operator/ (const apint &d1, const aprational &r2)
{
    return aprational (d1 * r2.den, r2.nom);
}

inline aprational operator/ (const aprational &r1, const apint &d2)
{
    return aprational (r1.nom, r1.den * d2);
}

inline bool operator== (const aprational &r1, const aprational &r2)
{
    return (r1.nom == r2.nom && r1.den == r2.den);
}

inline bool operator== (const apint &d1, const aprational &r2)
{
    return (d1 == r2.nom && r2.den == 1);
}

inline bool operator== (const aprational &r1, const apint &d2)
{
    return (r1.nom == d2 && r1.den == 1);
}

inline bool operator!= (const aprational &r1, const aprational &r2)
{
    return (r1.nom != r2.nom || r1.den != r2.den);
}

inline bool operator!= (const apint &d1, const aprational &r2)
{
    return (d1 != r2.nom || r2.den != 1);
}

inline bool operator!= (const aprational &r1, const apint &d2)
{
    return (r1.nom != d2 || r1.den != 1);
}


#endif  // __APRAT_H

⌨️ 快捷键说明

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