📄 aprat.h
字号:
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 + -