1 diff -rupN a/include/qd/qd_inline.h b/include/qd/qd_inline.h
2 --- a/include/qd/qd_inline.h 2009-12-28 22:03:35.000000000 -0500
3 +++ b/include/qd/qd_inline.h 2014-05-01 21:02:30.678558984 -0400
8 +/* Additional inline operators needed by SnapPy */
10 +inline qd_real::operator int() const {
14 +inline qd_real::operator long int() const {
15 + return (long int) x[0];
18 +inline qd_real::operator long long() const {
19 + return (long long) x[0];
22 +inline qd_real::operator double() const {
27 +inline qd_real mul_pwr2(const qd_real &a, int b) {
28 + return qd_real(a[0] * b, a[1] * b, a[2] * b, a[3] * b);
31 +inline qd_real operator*(int &a, const qd_real &b) {
32 + return ((qd_real) a) * b;
35 +inline qd_real operator*(const qd_real &a, int &b) {
36 + return a * ((qd_real) b);
39 +inline qd_real operator/(const int &a, const qd_real &b) {
40 + return ((qd_real) a) / b;
43 +inline qd_real operator/(const qd_real &a, const int &b) {
44 + return a / ((qd_real) b);
48 +inline bool operator==(int a, const qd_real &b) {
49 + return (b == (qd_real) a);
52 +inline bool operator==(const qd_real &a, int b) {
53 + return (a == (qd_real) b);
56 +inline bool operator<(const int &a, const qd_real &b) {
57 + return ((qd_real) a) < b;
60 +inline bool operator<(const qd_real &a, const int &b) {
61 + return a < ((qd_real) b);
64 +inline bool operator>(const int &a, const qd_real &b) {
65 + return ((qd_real) a) > b;
68 +inline bool operator>(const qd_real &a, const int &b) {
69 + return a > ((qd_real) b);
72 +inline bool operator<=(const int &a, const qd_real &b) {
73 + return ((qd_real) a) <= b;
76 +inline bool operator<=(const qd_real &a, const int &b) {
77 + return a <= ((qd_real) b);
80 +inline bool operator>=(const int &a, const qd_real &b) {
81 + return ((qd_real) a) >= b;
84 +inline bool operator>=(const qd_real &a, const int &b) {
85 + return a >= ((qd_real) b);
90 /********** Constructors **********/
91 inline qd_real::qd_real(double x0, double x1, double x2, double x3) {
93 @@ -474,6 +556,7 @@ inline qd_real &qd_real::operator-=(cons
94 return ((*this) += (-a));
97 +/********** Multiplications **********/
99 inline qd_real operator*(double a, const qd_real &b) {
101 @@ -487,7 +570,6 @@ inline qd_real mul_pwr2(const qd_real &a
102 return qd_real(a[0] * b, a[1] * b, a[2] * b, a[3] * b);
105 -/********** Multiplications **********/
106 inline qd_real operator*(const qd_real &a, double b) {
107 double p0, p1, p2, p3;
109 @@ -734,6 +816,8 @@ inline qd_real &qd_real::operator*=(cons
114 +/********** Divisions **********/
115 inline qd_real operator/ (const qd_real &a, const dd_real &b) {
117 return qd_real::sloppy_div(a, b);
118 @@ -760,6 +844,7 @@ inline qd_real operator/(const dd_real &
119 return qd_real(a) / b;
123 /********** Self-Divisions **********/
124 /* quad-double /= double */
125 inline qd_real &qd_real::operator/=(double a) {
126 @@ -895,7 +980,6 @@ inline bool operator>(const qd_real &a,
127 (a[2] == b[2] && a[3] > b[3]))))));
131 /********** Less-Than-Or-Equal-To Comparison **********/
132 inline bool operator<=(const qd_real &a, double b) {
133 return (a[0] < b || (a[0] == b && a[1] <= 0.0));
134 @@ -948,8 +1032,6 @@ inline bool operator>=(const qd_real &a,
135 (a[2] == b[2] && a[3] >= b[3]))))));
140 /********** Not-Equal-To Comparison **********/
141 inline bool operator!=(const qd_real &a, double b) {
143 diff -rupN a/include/qd/qd_real.h b/include/qd/qd_real.h
144 --- a/include/qd/qd_real.h 2009-05-11 13:45:05.000000000 -0400
145 +++ b/include/qd/qd_real.h 2014-05-01 21:02:30.678558984 -0400
146 @@ -71,6 +71,13 @@ struct QD_API qd_real {
147 double operator[](int i) const;
148 double &operator[](int i);
150 + /* Conversion operators used by SnapPy */
151 + operator int() const;
152 + operator long int() const;
153 + operator long long() const;
154 + operator double() const;
157 static void error(const char *msg);
160 @@ -163,6 +170,9 @@ QD_API inline bool isinf(const qd_real &
161 /* Computes qd * d where d is known to be a power of 2.
162 This can be done component wise. */
163 QD_API qd_real mul_pwr2(const qd_real &qd, double d);
164 +/* SnapPy needs integer powers too */
165 +QD_API qd_real mul_pwr2(const qd_real &a, int b);
168 QD_API qd_real operator+(const qd_real &a, const qd_real &b);
169 QD_API qd_real operator+(const dd_real &a, const qd_real &b);