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

📄 apint.h

📁 任意精度计算的实现
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef __cplusplus
#error Must use C++ for the type apint.
#endif


#if !defined(__APINT_H)
#define __APINT_H

#if !defined(__APFLOAT_H)
#include "apfloat.h"
#endif


// Integer number class

class apint
{
public:
    // Constructors
    apint (const apfloat &newval) { val = floor (newval); }
    apint () {};

    // Operator functions
    friend apint operator+ (const apint &, const apint &);
    friend apint operator- (const apint &, const apint &);
    friend apint operator* (const apint &, const apint &);
    friend apint operator/ (const apint &, const apint &);
    friend apint operator% (const apint &, const apint &);
    friend apint operator<< (const apint &, size_t);
    friend apint operator>> (const apint &, size_t);
    friend bool operator== (const apint &, const apint &);
    friend bool operator!= (const apint &, const apint &);
    friend bool operator>= (const apint &, const apint &);
    friend bool operator<= (const apint &, const apint &);
    friend bool operator> (const apint &, const apint &);
    friend bool operator< (const apint &, const apint &);
    friend std::ostream &operator<< (std::ostream &, const apint &);
    friend std::istream &operator>> (std::istream &, apint &);
    apint &operator++ ();
    apint &operator-- ();
    apint operator++ (int);
    apint operator-- (int);
    apint &operator+= (const apint &);
    apint &operator-= (const apint &);
    apint &operator*= (const apint &);
    apint &operator/= (const apint &);
    apint &operator%= (const apint &);
    apint &operator<<= (size_t);
    apint &operator>>= (size_t);
    apint operator+ () const;
    apint operator- () const;

    // Type-converted functions
    apint (int newval) { val = apfloat (newval); }
    apint (unsigned newval) { val = apfloat (newval); }
    apint (long newval) { val = apfloat (newval); }
    apint (unsigned long newval) { val = apfloat (newval); }
    apint (double newval) { val = floor (apfloat (newval)); }
    apint (char *newval) { val = floor (apfloat (newval)); }

    friend apint operator+ (int d1, const apint &d2) { return apint (d1) + d2; }
    friend apint operator+ (unsigned d1, const apint &d2) { return apint (d1) + d2; }
    friend apint operator+ (long d1, const apint &d2) { return apint (d1) + d2; }
    friend apint operator+ (unsigned long d1, const apint &d2) { return apint (d1) + d2; }
    friend apint operator+ (const apint &d1, int d2) { return d1 + apint (d2); }
    friend apint operator+ (const apint &d1, unsigned d2) { return d1 + apint (d2); }
    friend apint operator+ (const apint &d1, long d2) { return d1 + apint (d2); }
    friend apint operator+ (const apint &d1, unsigned long d2) { return d1 + apint (d2); }
    friend apint operator- (int d1, const apint &d2) { return apint (d1) - d2; }
    friend apint operator- (unsigned d1, const apint &d2) { return apint (d1) - d2; }
    friend apint operator- (long d1, const apint &d2) { return apint (d1) - d2; }
    friend apint operator- (unsigned long d1, const apint &d2) { return apint (d1) - d2; }
    friend apint operator- (const apint &d1, int d2) { return d1 - apint (d2); }
    friend apint operator- (const apint &d1, unsigned d2) { return d1 - apint (d2); }
    friend apint operator- (const apint &d1, long d2) { return d1 - apint (d2); }
    friend apint operator- (const apint &d1, unsigned long d2) { return d1 - apint (d2); }
    friend apint operator* (int d1, const apint &d2) { return apint (d1) * d2; }
    friend apint operator* (unsigned d1, const apint &d2) { return apint (d1) * d2; }
    friend apint operator* (long d1, const apint &d2) { return apint (d1) * d2; }
    friend apint operator* (unsigned long d1, const apint &d2) { return apint (d1) * d2; }
    friend apint operator* (const apint &d1, int d2) { return d1 * apint (d2); }
    friend apint operator* (const apint &d1, unsigned d2) { return d1 * apint (d2); }
    friend apint operator* (const apint &d1, long d2) { return d1 * apint (d2); }
    friend apint operator* (const apint &d1, unsigned long d2) { return d1 * apint (d2); }
    friend apint operator/ (int d1, const apint &d2) { return apint (d1) / d2; }
    friend apint operator/ (unsigned d1, const apint &d2) { return apint (d1) / d2; }
    friend apint operator/ (long d1, const apint &d2) { return apint (d1) / d2; }
    friend apint operator/ (unsigned long d1, const apint &d2) { return apint (d1) / d2; }
    friend apint operator/ (const apint &d1, int d2) { return d1 / apint (d2); }
    friend apint operator/ (const apint &d1, unsigned d2) { return d1 / apint (d2); }
    friend apint operator/ (const apint &d1, long d2) { return d1 / apint (d2); }
    friend apint operator/ (const apint &d1, unsigned long d2) { return d1 / apint (d2); }
    friend apint operator% (int d1, const apint &d2) { return apint (d1) % d2; }
    friend apint operator% (unsigned d1, const apint &d2) { return apint (d1) % d2; }
    friend apint operator% (long d1, const apint &d2) { return apint (d1) % d2; }
    friend apint operator% (unsigned long d1, const apint &d2) { return apint (d1) % d2; }
    friend apint operator% (const apint &d1, int d2) { return d1 % apint (d2); }
    friend apint operator% (const apint &d1, unsigned d2) { return d1 % apint (d2); }
    friend apint operator% (const apint &d1, long d2) { return d1 % apint (d2); }
    friend apint operator% (const apint &d1, unsigned long d2) { return d1 % apint (d2); }

    friend apfloat operator+ (double d1, const apint &d2) { return apfloat (d1) + d2.val; }
    friend apfloat operator+ (char *d1, const apint &d2) { return apfloat (d1) + d2.val; }
    friend apfloat operator+ (const apint &d1, double d2) { return d1.val + apfloat (d2); }
    friend apfloat operator+ (const apint &d1, char *d2) { return d1.val + apfloat (d2); }
    friend apfloat operator- (double d1, const apint &d2) { return apfloat (d1) - d2.val; }
    friend apfloat operator- (char *d1, const apint &d2) { return apfloat (d1) - d2.val; }
    friend apfloat operator- (const apint &d1, double d2) { return d1.val - apfloat (d2); }
    friend apfloat operator- (const apint &d1, char *d2) { return d1.val - apfloat (d2); }
    friend apfloat operator* (double d1, const apint &d2) { return apfloat (d1) * d2.val; }
    friend apfloat operator* (char *d1, const apint &d2) { return apfloat (d1) * d2.val; }
    friend apfloat operator* (const apint &d1, double d2) { return d1.val * apfloat (d2); }
    friend apfloat operator* (const apint &d1, char *d2) { return d1.val * apfloat (d2); }
    friend apfloat operator/ (double d1, const apint &d2) { return apfloat (d1) / d2.val; }
    friend apfloat operator/ (char *d1, const apint &d2) { return apfloat (d1) / d2.val; }
    friend apfloat operator/ (const apint &d1, double d2) { return d1.val / apfloat (d2); }
    friend apfloat operator/ (const apint &d1, char *d2) { return d1.val / apfloat (d2); }

    friend bool operator== (int d1, const apint &d2) { return apfloat (d1) == d2.val; }
    friend bool operator== (unsigned d1, const apint &d2) { return apfloat (d1) == d2.val; }
    friend bool operator== (long d1, const apint &d2) { return apfloat (d1) == d2.val; }
    friend bool operator== (unsigned long d1, const apint &d2) { return apfloat (d1) == d2.val; }
    friend bool operator== (double d1, const apint &d2) { return apfloat (d1) == d2.val; }
    friend bool operator== (char *d1, const apint &d2) { return apfloat (d1) == d2.val; }
    friend bool operator== (const apint &d1, int d2) { return d1.val == apfloat (d2); }
    friend bool operator== (const apint &d1, unsigned d2) { return d1.val == apfloat (d2); }
    friend bool operator== (const apint &d1, long d2) { return d1.val == apfloat (d2); }
    friend bool operator== (const apint &d1, unsigned long d2) { return d1.val == apfloat (d2); }
    friend bool operator== (const apint &d1, double d2) { return d1.val == apfloat (d2); }
    friend bool operator== (const apint &d1, char *d2) { return d1.val == apfloat (d2); }
    friend bool operator!= (int d1, const apint &d2) { return apfloat (d1) != d2.val; }
    friend bool operator!= (unsigned d1, const apint &d2) { return apfloat (d1) != d2.val; }
    friend bool operator!= (long d1, const apint &d2) { return apfloat (d1) != d2.val; }
    friend bool operator!= (unsigned long d1, const apint &d2) { return apfloat (d1) != d2.val; }
    friend bool operator!= (double d1, const apint &d2) { return apfloat (d1) != d2.val; }
    friend bool operator!= (char *d1, const apint &d2) { return apfloat (d1) != d2.val; }
    friend bool operator!= (const apint &d1, int d2) { return d1.val != apfloat (d2); }
    friend bool operator!= (const apint &d1, unsigned d2) { return d1.val != apfloat (d2); }
    friend bool operator!= (const apint &d1, long d2) { return d1.val != apfloat (d2); }
    friend bool operator!= (const apint &d1, unsigned long d2) { return d1.val != apfloat (d2); }
    friend bool operator!= (const apint &d1, double d2) { return d1.val != apfloat (d2); }
    friend bool operator!= (const apint &d1, char *d2) { return d1.val != apfloat (d2); }
    friend bool operator>= (int d1, const apint &d2) { return apfloat (d1) >= d2.val; }
    friend bool operator>= (unsigned d1, const apint &d2) { return apfloat (d1) >= d2.val; }
    friend bool operator>= (long d1, const apint &d2) { return apfloat (d1) >= d2.val; }
    friend bool operator>= (unsigned long d1, const apint &d2) { return apfloat (d1) >= d2.val; }
    friend bool operator>= (double d1, const apint &d2) { return apfloat (d1) >= d2.val; }
    friend bool operator>= (char *d1, const apint &d2) { return apfloat (d1) >= d2.val; }
    friend bool operator>= (const apint &d1, int d2) { return d1.val >= apfloat (d2); }
    friend bool operator>= (const apint &d1, unsigned d2) { return d1.val >= apfloat (d2); }
    friend bool operator>= (const apint &d1, long d2) { return d1.val >= apfloat (d2); }
    friend bool operator>= (const apint &d1, unsigned long d2) { return d1.val >= apfloat (d2); }
    friend bool operator>= (const apint &d1, double d2) { return d1.val >= apfloat (d2); }
    friend bool operator>= (const apint &d1, char *d2) { return d1.val >= apfloat (d2); }
    friend bool operator<= (int d1, const apint &d2) { return apfloat (d1) <= d2.val; }
    friend bool operator<= (unsigned d1, const apint &d2) { return apfloat (d1) <= d2.val; }
    friend bool operator<= (long d1, const apint &d2) { return apfloat (d1) <= d2.val; }
    friend bool operator<= (unsigned long d1, const apint &d2) { return apfloat (d1) <= d2.val; }
    friend bool operator<= (double d1, const apint &d2) { return apfloat (d1) <= d2.val; }
    friend bool operator<= (char *d1, const apint &d2) { return apfloat (d1) <= d2.val; }
    friend bool operator<= (const apint &d1, int d2) { return d1.val <= apfloat (d2); }
    friend bool operator<= (const apint &d1, unsigned d2) { return d1.val <= apfloat (d2); }
    friend bool operator<= (const apint &d1, long d2) { return d1.val <= apfloat (d2); }
    friend bool operator<= (const apint &d1, unsigned long d2) { return d1.val <= apfloat (d2); }
    friend bool operator<= (const apint &d1, double d2) { return d1.val <= apfloat (d2); }
    friend bool operator<= (const apint &d1, char *d2) { return d1.val <= apfloat (d2); }
    friend bool operator> (int d1, const apint &d2) { return apfloat (d1) > d2.val; }
    friend bool operator> (unsigned d1, const apint &d2) { return apfloat (d1) > d2.val; }
    friend bool operator> (long d1, const apint &d2) { return apfloat (d1) > d2.val; }
    friend bool operator> (unsigned long d1, const apint &d2) { return apfloat (d1) > d2.val; }
    friend bool operator> (double d1, const apint &d2) { return apfloat (d1) > d2.val; }
    friend bool operator> (char *d1, const apint &d2) { return apfloat (d1) > d2.val; }
    friend bool operator> (const apint &d1, int d2) { return d1.val > apfloat (d2); }
    friend bool operator> (const apint &d1, unsigned d2) { return d1.val > apfloat (d2); }
    friend bool operator> (const apint &d1, long d2) { return d1.val > apfloat (d2); }
    friend bool operator> (const apint &d1, unsigned long d2) { return d1.val > apfloat (d2); }
    friend bool operator> (const apint &d1, double d2) { return d1.val > apfloat (d2); }
    friend bool operator> (const apint &d1, char *d2) { return d1.val > apfloat (d2); }
    friend bool operator< (int d1, const apint &d2) { return apfloat (d1) < d2.val; }
    friend bool operator< (unsigned d1, const apint &d2) { return apfloat (d1) < d2.val; }
    friend bool operator< (long d1, const apint &d2) { return apfloat (d1) < d2.val; }
    friend bool operator< (unsigned long d1, const apint &d2) { return apfloat (d1) < d2.val; }
    friend bool operator< (double d1, const apint &d2) { return apfloat (d1) < d2.val; }
    friend bool operator< (char *d1, const apint &d2) { return apfloat (d1) < d2.val; }
    friend bool operator< (const apint &d1, int d2) { return d1.val < apfloat (d2); }
    friend bool operator< (const apint &d1, unsigned d2) { return d1.val < apfloat (d2); }
    friend bool operator< (const apint &d1, long d2) { return d1.val < apfloat (d2); }
    friend bool operator< (const apint &d1, unsigned long d2) { return d1.val < apfloat (d2); }
    friend bool operator< (const apint &d1, double d2) { return d1.val < apfloat (d2); }
    friend bool operator< (const apint &d1, char *d2) { return d1.val < apfloat (d2); }

    apint &operator+= (int d) { val = val + d; return *this; }
    apint &operator+= (unsigned d) { val = val + d; return *this; }
    apint &operator+= (long d) { val = val + d; return *this; }
    apint &operator+= (unsigned long d) { val = val + d; return *this; }
    apint &operator+= (double d) { *this = val + d; return *this; }
    apint &operator+= (char *d) { *this = val + d; return *this; }
    apint &operator-= (int d) { val = val - d; return *this; }
    apint &operator-= (unsigned d) { val = val - d; return *this; }
    apint &operator-= (long d) { val = val - d; return *this; }
    apint &operator-= (unsigned long d) { val = val - d; return *this; }
    apint &operator-= (double d) { *this = val - d; return *this; }
    apint &operator-= (char *d) { *this = val - d; return *this; }
    apint &operator*= (int d) { val = val * d; return *this; }
    apint &operator*= (unsigned d) { val = val * d; return *this; }
    apint &operator*= (long d) { val = val * d; return *this; }
    apint &operator*= (unsigned long d) { val = val * d; return *this; }
    apint &operator*= (double d) { *this = val * d; return *this; }
    apint &operator*= (char *d) { *this = val * d; return *this; }
    apint &operator/= (int d) { *this = *this / apint (d); return *this; }

⌨️ 快捷键说明

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