6 #ifndef REALROOT_EXTENDED_H_
7 #define REALROOT_EXTENDED_H_
15 #define extended_check(A, B) \
16 assert((A.c == 0 || B.c == 0 || A.c == B.c) && \
17 (A.c != 0 || A.b == 0) && \
18 (B.c != 0 || B.b == 0))
21 #define common_root(A, B) \
22 (A.c != 0 ? A.c : B.c)
46 extended(
const T &a_,
const T &b_,
const T &c_)
63 static int compare(
const Self &lhs,
const Self &rhs)
66 Self delta = lhs - rhs;
68 if (delta.
a == 0 && delta.
b == 0)
return 0;
70 if (delta.
a == 0)
return signof(delta.
b);
71 if (delta.
b == 0)
return signof(delta.
a);
73 if (delta.
a < 0 && delta.
b < 0)
return -1;
75 if (delta.
a > 0 && delta.
b > 0)
return 1;
77 T aa = delta.
a * delta.
a;
78 T bbc = delta.
b * delta.
b * delta.
c;
87 template<
class NT>
inline
91 return lhs.
a == rhs.
a && lhs.
b == rhs.
b;
94 template<
class NT>
inline
100 template<
class NT>
inline
106 lhs.
a * rhs.
b + lhs.
b * rhs.
a,
110 template<
class NT>
inline
121 template<
class NT>
inline
131 template<
class NT>
inline
141 template<
class NT>
inline
149 template<
class NT>
inline
157 template<
class NT>
inline
164 template<
class NT>
inline
171 template<
class NT>
inline
178 template<
class NT>
inline
185 template<
class NT>
inline
191 template<
class NT>
inline
197 template<
class NT>
inline
203 template<
class NT>
inline
209 #undef extended_check
213 #endif // REALROOT_EXTENDED_H_
extended< NT > & operator+=(extended< NT > &x, const extended< NT > &other)
Definition: extended.hpp:158
bool operator==(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:88
#define common_root(A, B)
Definition: extended.hpp:21
extended< NT > Self
Definition: extended.hpp:31
Definition: extended.hpp:25
extended< NT > operator-(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:132
extended< NT > operator/(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:111
bool operator>=(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:204
extended()
Definition: extended.hpp:35
scalar< NT > T
Definition: extended.hpp:30
T c
Definition: extended.hpp:33
extended< NT > & operator/=(extended< NT > &x, const extended< NT > &other)
Definition: extended.hpp:179
extended< NT > operator+(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:122
static int compare(const Self &lhs, const Self &rhs)
Definition: extended.hpp:63
NT_ NT
Definition: extended.hpp:29
extended< NT > & operator*=(extended< NT > &x, const extended< NT > &other)
Definition: extended.hpp:172
extended(const T &a_)
Definition: extended.hpp:39
extended(const T &a_, const T &b_, const T &c_)
Definition: extended.hpp:46
bool operator>(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:198
#define extended_check(A, B)
Definition: extended.hpp:15
ZZ denominator(const QQ &a)
Definition: GMPXX.hpp:96
static int signof(const T &x)
Definition: extended.hpp:53
T b
Definition: extended.hpp:33
T a
Definition: extended.hpp:33
bool operator!=(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:95
extended< NT > & operator-=(extended< NT > &x, const extended< NT > &other)
Definition: extended.hpp:165
extended< NT > operator*(const extended< NT > &lhs, const extended< NT > &rhs)
Definition: extended.hpp:101